Редактирование: 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]]

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Wiki.crossplatform.ru:Авторское право). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!