Лекция 09. GUI.Swing¶
Введение¶
Пакеты¶
Для построения GUI в Java используются следующие основные пакеты:
- Awt - появился в первых версиях, используется мало.
- Swing - самый популярный пакет.
- JavaFX - современный и перспективный.
Awt пример¶

Swing пример¶

JavaFX пример¶

Сравнение¶
Недостатки awt:
- ‘’тяжеловесные’’ компоненты (системозависимые);
- невозможность изменения внешнего вида.
Недостатки swing:
- ограничения в изменении внешнего вида;
- ориентация на desktop-приложения.
Swing¶
Простое приложение¶
Рассмотрим простейшее Swing-приложение.
import javax.swing.*;
public class Simple
{
public static void main (String [] args) {
JFrame myWindow = new JFrame("Пробное окно");
myWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myWindow.setSize(400, 300);
myWindow.setVisible(true);
}
}
Контейнеры верхнего уровня¶
Все swing-программы должны включать в себя Контейнеры первого уровня
- JFrame
- JApplet
- JWindow
- JDialog
Эти контейнеры находятся на вершине иерархии контейнеров и
содержат в себе другие, ‘’легковесные’’ контейнеры и элементы
управления. Разница между JFrame и JWindow может быть показана
на следующем примере:
import javax.swing.*;
public class Simple
{
public static void main (String [] args) {
JFrame win1 = new JFrame("JFrame");
win1.setSize(400, 300);
win1.setLocation(10,10);
JWindow win2 = new JWindow();
win2.setSize(200,300);
win2.setLocation(500,200);
win1.setVisible(true);
win2.setVisible(true);
}
}
Окно JFrame, в отличие от JWindow
обладает заголовком, кнопками управления.
Обработка событий¶
События¶
Рассмотрим пример с обработкой события:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Simple
{
public static void main (String [] args) {
JFrame myWindow = new JFrame("Пробное окно");
myWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myWindow.setSize(400, 300);
myWindow.setLayout(new FlowLayout());
JButton btn1 = new JButton("Привет!");
JButton btn2 = new JButton("Пока!");
btn1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
JOptionPane.showMessageDialog(null,"Привет","Нажато",
JOptionPane.WARNING_MESSAGE);
}
});
myWindow.add(btn1);
myWindow.add(btn2);
myWindow.setVisible(true);
}
}
Для размещения кнопок в окне приложения мы должны использовать
менеджеры компоновки:
- BorderLayout
- FlowLayout
- GridLayout
- GridBagLayout
- BoxLayout
- CardLayout
- GroupLayout
- SpringLayout
Обзор компонентов¶
Button¶
Класс JButton
JButton btn = new JButton("Title");
JButton(Icon);
JButton(String);
JButton(String,Icon);
protected static ImageIcon createImageIcon(String path) {
java.net.URL imgURL = ButtonDemo.class.getResource(path);
return new ImageIcon(imgURL);
}
..
ImageIcon ic = createImageIcon("images/icon1.gif");
JButton btn1 = new JButton(ic);
..
TextField¶
JTextField(int cols);
JTextField(String str,int cols);
JTextField(String str);
textfield.addActionListener(this);
..
public void actionPerformed(ActionEvent evt) {
String text=textfield.getText();
..
textfield.setText("Новый текст");
..
}
Password¶
..
private static String OK = "ok";
..
passfield = new JPasswordField(10);
passfield.setActionCommand(OK);
passfield.setActionListener(this);
..
btn.setActionCommand(OK);
..
public void setActionPerformed(ActionEvent evt) {
String cmd = ebv.getActionCommand();
if(OK.equals(cmd)) {
char[] pass=passfield.getPassword();
..
}
}
TextArea¶
text = new JTextArea();
..
text.setColumns(20);
text.setLineWrap(true);
text.setRows(5);
text.setEditable(true);
..
text.getText();
text.setText("...");
..
CheckBox¶
check = new JCheckBox("Photo");
check.setSelected(true);
..
check.addItemListener(new ItemListener() {
public void itemStateChanged(ItemIvent e) {
if(check.isSelected())...
}
}
RadioButton¶
private static String RED="Red";
private static String BLUE="Blue";
..
rbColorRed = new JRadioButton(RED);
rbColorBlue = new JRadioButton(BLUE);
rbColorRed.setActionCommand(RED);
rbColorBlue.setActionCommand(BLUE);
rbColorRed.setSelected(true);
..
ButtonGroup group = new ButtonGroup();
group.add(rbColorRed);
group.add(rbColorBlue);
..
rbColorRed.addActionListener(this);
rbColorBlue.addActionListener(this);
..
public void actionPerformed(ActionEvent e) {
picture.setIcon(new ImageIcon("images/"
+ e.getActionCommand()
+ ".gif"));
}
Dialogs¶
MessageBox¶
import javax.swing.JOptionPane
public class ClassNameHere {
public static void infoBox(String infoMessage, String titleBar) {
JOptionPane.showMessageDialog(null, infoMessage,
"InfoBox: " + titleBar,
JOptionPane.INFORMATION_MESSAGE);
}
}
Варианты:
- JOptionPane.WARNING_MESSAGE
- JOptionPane.ERROR_MESSAGE
- JOptionPane.PLAIN_MESSAGE
- JOptionPane.INFORMATION_MESSAGE

//Custom button text
Object[] options = {"Yes, please",
"No, thanks",
"No eggs, no ham!"};
int n = JOptionPane.showOptionDialog(frame,
"Would you like some green eggs to go "
+ "with that ham?",
"A Silly Question",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
options,
options[2])
