Редактирование: Java Swing Первые программы
Материал из Wiki.crossplatform.ru
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 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]] |