|   |     | 
		| Строка 1: | Строка 1: | 
| - | В этой главе мы напишем нашу первую программу исползуя Swing. Пример будет весьма простеньким. Будет охвачена лишь некоторая часть основных функциональных возможностей.
 |  | 
|  |  |  |  | 
| - | 
 |  | 
| - | == Наш первый примерчик ==
 |  | 
| - | В нашем первом примере мы покажем основное окно. 
 |  | 
| - | <source lang="cpp">
 |  | 
| - | import javax.swing.JFrame;
 |  | 
| - | 
 |  | 
| - | 
 |  | 
| - | public class Simple extends JFrame {
 |  | 
| - | 
 |  | 
| - |     public Simple() {
 |  | 
| - | 
 |  | 
| - |         setSize(300, 200);
 |  | 
| - |         setTitle("Simple");
 |  | 
| - |         setDefaultCloseOperation(EXIT_ON_CLOSE);
 |  | 
| - |    }
 |  | 
| - | 
 |  | 
| - |     public static void main(String[] args) {
 |  | 
| - | 
 |  | 
| - |         Simple simple = new Simple();
 |  | 
| - |         simple.setVisible(true);
 |  | 
| - | 
 |  | 
| - |     } 
 |  | 
| - | }
 |  | 
| - | </source>
 |  | 
| - | Несмотря на то, что приведенный фрагмент кода достаточно мал, окно приложения может делать достаточно много. Оно может изменять размер, максимизироваться, минимизироваться. При этом все сложности реализации сокрыты от прикладного разработчика. 
 |  | 
| - | <source lang="cpp">
 |  | 
| - |  import javax.swing.JFrame;
 |  | 
| - | </source>
 |  | 
| - | Эта строчка кода осуществляет импорт класса JFrame из пакета javax.swing.JFrame. ''Этого можно было бы и не делать, но тогда приходилось бы каждый раз писать javax.swing.JFrame вместо JFrame - прим. переводчика.''
 |  | 
| - | В данном случае, JFrame - это контейнер, который используется для размещения на нем других виджетов. 
 |  | 
| - | <source lang="cpp">
 |  | 
| - |  setSize(300, 200);
 |  | 
| - |  setTitle("Simple");
 |  | 
| - | </source>
 |  | 
| - | Этот фрагмент коде изменяет размер экрана, устанавливая его равным 300 пикселям по ширине и 200 пикселям по высоте. Также в качестве заголовка окна устанавливается "Simple".
 |  | 
| - | <source lang="cpp">
 |  | 
| - |  setDefaultCloseOperation(EXIT_ON_CLOSE);
 |  | 
| - | </source>
 |  | 
| - | Этот метод будет закрывать окно, если мы нажмем на кнопку закрытия окна ("крестик"). По умолчанию ничего не происходит.
 |  | 
| - | ''Примечание переводчика: Это не совсем так. По умолчанию приложение может и не завершить работу по нажатию на "крестик", но само окно может исчезнуть с экрана'' 
 |  | 
| - | 
 |  | 
| - | [[image: java_swing_simple.jpg | center]]
 |  | 
| - | 
 |  | 
| - | == Позиционируем окно по центру экрана==
 |  | 
| - | По умолчанию, окно, отображаемое на экране, расположено не по центру. В большинстве случаев оно будет расположенов левом верхнем углу. Следующий фрагмент кода реализует окно, расположенное строго по центру экрана, вне зависимости от разрешения последнего.
 |  | 
| - | <source lang="cpp">
 |  | 
| - | import java.awt.Dimension;
 |  | 
| - | import java.awt.Toolkit;
 |  | 
| - | 
 |  | 
| - | import javax.swing.JFrame;
 |  | 
| - | 
 |  | 
| - | public class CenterOnScreen extends JFrame {
 |  | 
| - | 
 |  | 
| - |     public CenterOnScreen() {
 |  | 
| - | 
 |  | 
| - |         setSize(300, 200);
 |  | 
| - |         setTitle("CenterOnScreen");
 |  | 
| - |         setDefaultCloseOperation(EXIT_ON_CLOSE);
 |  | 
| - | 
 |  | 
| - |         Toolkit toolkit = getToolkit();
 |  | 
| - |         Dimension size = toolkit.getScreenSize();
 |  | 
| - |         setLocation(size.width/2 - getWidth()/2, 
 |  | 
| - | 		size.height/2 - getHeight()/2);
 |  | 
| - |     }
 |  | 
| - | 
 |  | 
| - |     public static void main(String[] args) {
 |  | 
| - | 
 |  | 
| - |         CenterOnScreen cos = new CenterOnScreen();
 |  | 
| - |         cos.setVisible(true);
 |  | 
| - | 
 |  | 
| - |     }
 |  | 
| - | }
 |  | 
| - | </source>
 |  | 
| - | Для центрирования окна на экране мы сначала должны узнать разрешение монитора. Для этого мы используем класс <i>Toolkit</i>. 
 |  | 
| - | <source lang="cpp">
 |  | 
| - |  Toolkit toolkit = getToolkit();
 |  | 
| - |  Dimension size = toolkit.getScreenSize();
 |  | 
| - | </source>
 |  | 
| - | Используя объект (экземпляр) toolkit класса Toolkit, выясняем размер экрана.
 |  | 
| - | <source lang="cpp">
 |  | 
| - |  setLocation(size.width/2 - getWidth()/2, size.height/2 - getHeight()/2);
 |  | 
| - | </source>
 |  | 
| - | Для непосредственно центрирования окна, вызовем метод <i>setLocation()</i>.
 |  | 
| - | 
 |  | 
| - | == Два Button'а (Кнопки) ==
 |  | 
| - | В нашем следующем примере мы создадим и покажем два объекта типа Button. Первая кнопка будет отвечать за воспроиздедение звукового сигнала, а вторая -  за закрытие окна.
 |  | 
| - | <source lang="cpp">
 |  | 
| - | import java.awt.Dimension;
 |  | 
| - | import java.awt.Toolkit;
 |  | 
| - | import java.awt.event.ActionEvent;
 |  | 
| - | import java.awt.event.ActionListener;
 |  | 
| - | 
 |  | 
| - | import javax.swing.JButton;
 |  | 
| - | import javax.swing.JFrame;
 |  | 
| - | import javax.swing.JPanel;
 |  | 
| - | 
 |  | 
| - | 
 |  | 
| - | public class Buttons extends JFrame {
 |  | 
| - | 
 |  | 
| - |     private Toolkit toolkit;
 |  | 
| - | 
 |  | 
| - |     public Buttons() {
 |  | 
| - | 
 |  | 
| - |         setTitle("Buttons");
 |  | 
| - |         setSize(300, 200);
 |  | 
| - | 
 |  | 
| - |         toolkit = getToolkit();
 |  | 
| - |         Dimension size = toolkit.getScreenSize();
 |  | 
| - |         setLocation((size.width - getWidth())/2, (size.height - getHeight())/2);
 |  | 
| - |         setDefaultCloseOperation(EXIT_ON_CLOSE);
 |  | 
| - | 
 |  | 
| - |         JPanel panel = new JPanel();
 |  | 
| - |         getContentPane().add(panel);
 |  | 
| - | 
 |  | 
| - | 	panel.setLayout(null);
 |  | 
| - | 
 |  | 
| - |         JButton beep = new JButton("Beep");
 |  | 
| - |         beep.setBounds(150, 60, 80, 30);
 |  | 
| - |         beep.addActionListener(new ActionListener() {
 |  | 
| - |             public void actionPerformed(ActionEvent event) {
 |  | 
| - |                 toolkit.beep();
 |  | 
| - |             }
 |  | 
| - |         });
 |  | 
| - | 
 |  | 
| - |        JButton close = new JButton("Close");
 |  | 
| - |        close.setBounds(50, 60, 80, 30);
 |  | 
| - |        close.addActionListener(new ActionListener() {
 |  | 
| - |            public void actionPerformed(ActionEvent event) {
 |  | 
| - |                System.exit(0);
 |  | 
| - |           }
 |  | 
| - |        });
 |  | 
| - | 
 |  | 
| - |         panel.add(beep);
 |  | 
| - |         panel.add(close);
 |  | 
| - | 
 |  | 
| - |     }
 |  | 
| - | 
 |  | 
| - |     public static void main(String[] args) {
 |  | 
| - | 
 |  | 
| - |         Buttons buttons = new Buttons();
 |  | 
| - |         buttons.setVisible(true);
 |  | 
| - | 
 |  | 
| - |     }
 |  | 
| - | }
 |  | 
| - | </source>
 |  | 
| - | В это примере мы рассмотрим две новые для нас темы - управление внешним видом и обработку событий. Эти темы будут затронуты лишь вскользь, поскольку каждой из них в дальшейшем посвящена соответсвующая глава. 
 |  | 
| - | <source lang="cpp">
 |  | 
| - |  JPanel panel = new JPanel();
 |  | 
| - |  getContentPane().add(panel);
 |  | 
| - | </source>
 |  | 
| - | Здесь мы создаем объект с именем panel класса<i>JPanel</i>. Сие есть общий легковесный контейнер. Далее добавляем объект класса JPanel к объекту класса JFrame. 
 |  | 
| - | <source lang="cpp">
 |  | 
| - |  panel.setLayout(null);
 |  | 
| - | </source>
 |  | 
| - | 
 |  | 
| - | По умолчанию, JPanel имеет менеджер <i>FlowLayout</i>. Менеджер размещения используются для расположения виджетов внутри их контейнеров. Если вызвать <i>setLayout(null)</i>, то мы сможем выполнять абсолютное позиционирование наших компонент. Для этого будем использовать метод <i>setBounds()</i>.
 |  | 
| - | <source lang="cpp">
 |  | 
| - |  JButton beep = new JButton("Beep");
 |  | 
| - |  beep.setBounds(150, 60, 80, 30);
 |  | 
| - |  beep.addActionListener(new ActionListener() {
 |  | 
| - |      public void actionPerformed(ActionEvent event) {
 |  | 
| - |          toolkit.beep();
 |  | 
| - |      }
 |  | 
| - |  });
 |  | 
| - | </source>
 |  | 
| - | В этом фрагменте создается кнопка (объект типа Button). Мы позиционируем ее посредством метода <i>setBounds()</i>. Далее мы добавим обработчик событий. Он будет вызван, после того как мы нажмем кнопку (совершим действие, наступит событие). Кнопка, ответсвенная за воспроизведение короткого звукого сигнал, собственно этим и будет заниматься.
 |  | 
| - | <source lang="cpp">
 |  | 
| - |  System.exit(0);
 |  | 
| - | </source>
 |  | 
| - | Кнопка close обеспечивает завершение работы приложения. Для этого мы будем вызывать метод <i>System.exit()</i>.
 |  | 
| - | <source lang="cpp">
 |  | 
| - |  panel.add(beep);
 |  | 
| - |  panel.add(close);
 |  | 
| - | </source>
 |  | 
| - | Для того чтобы  кнопки стали видимыми, мы добавим их на панель. 
 |  | 
| - | 
 |  | 
| - | [[image: java_swing_buttons.jpg  | center]]
 |  | 
| - | 
 |  | 
| - | == Tooltip - всплывающая подсказка ==
 |  | 
| - | Tooltips является частью внутренней справочной системы приложения. Swing показывает небольшой прямоугольник, если мы наводим указатель мыши на объект. 
 |  | 
| - | <source lang="cpp">
 |  | 
| - | import java.awt.Dimension;
 |  | 
| - | import java.awt.Toolkit;
 |  | 
| - | 
 |  | 
| - | import javax.swing.JButton;
 |  | 
| - | import javax.swing.JFrame;
 |  | 
| - | import javax.swing.JPanel;
 |  | 
| - | 
 |  | 
| - | 
 |  | 
| - | public class Tooltip extends JFrame {
 |  | 
| - | 
 |  | 
| - |     private Toolkit toolkit;
 |  | 
| - | 
 |  | 
| - |     public Tooltip() {
 |  | 
| - | 
 |  | 
| - |         setTitle("Tooltip");
 |  | 
| - |         setSize(300, 200);
 |  | 
| - | 
 |  | 
| - |         toolkit = getToolkit();
 |  | 
| - |         Dimension size = toolkit.getScreenSize();
 |  | 
| - |         setLocation((size.width - getWidth())/2, (size.height - getHeight())/2);
 |  | 
| - |         setDefaultCloseOperation(EXIT_ON_CLOSE);
 |  | 
| - | 
 |  | 
| - |         JPanel panel = new JPanel();
 |  | 
| - |         getContentPane().add(panel);
 |  | 
| - | 
 |  | 
| - |         panel.setLayout(null);
 |  | 
| - |         panel.setToolTipText("A Panel container");
 |  | 
| - | 
 |  | 
| - |         JButton button = new JButton("Button");
 |  | 
| - |         button.setBounds(100, 60, 80, 30);
 |  | 
| - |         button.setToolTipText("A button component");
 |  | 
| - | 
 |  | 
| - |         panel.add(button);
 |  | 
| - | 
 |  | 
| - |     }
 |  | 
| - | 
 |  | 
| - |     public static void main(String[] args) {
 |  | 
| - | 
 |  | 
| - |         Tooltip tooltip = new Tooltip();
 |  | 
| - |         tooltip.setVisible(true);
 |  | 
| - | 
 |  | 
| - |     }
 |  | 
| - | }
 |  | 
| - | </source>
 |  | 
| - | В этом примере мы настроили всплывающую подсказку (tooltip) для панели и кнопки.
 |  | 
| - | <source lang="cpp">
 |  | 
| - |  panel.setToolTipText("A Panel container");
 |  | 
| - | </source>
 |  | 
| - | Для установки текста всплывающей подсказки мы использовали метод <i>setTooltipText()</i>.
 |  | 
| - | 
 |  | 
| - | [[image: java_swing_tooltip.jpg | center]]
 |  | 
| - | 
 |  | 
| - | [[Категория:Java]]
 |  |