|
|
(2 промежуточные версии не показаны) |
Строка 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]]
| |
- |
| |
- | == A tooltip ==
| |
- | Tooltips are part of the internal application's help system. The Swing shows a small rectangular window, if we hover a mouse pointer over an object.
| |
- | <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>
| |
- | In the example, we set the tooltip for the frame and the button.
| |
- | <source lang="cpp">
| |
- | panel.setToolTipText("A Panel container");
| |
- | </source>
| |
- | To enable a tooltip, we call the <i>setTooltipText()</i> method.
| |
- |
| |
- | [[image: java_swing_tooltip.jpg | center]]
| |
- |
| |
- | [[Категория:Java]]
| |