Java: графический интерфейс пользователя
Swing и AWT AWT – Abstract Window Toolkit, единственный инструментарий для визуального интерфейса до 1998 года; Swing – часть библиотеки JFC (Java Foundation Classes), особенности: –Кроссплатформенность (нет зависимости от стандартных элементов ОС); –Динамический вид и поведение (Look-and- feel).
Пакеты и классы AWT
Пакеты и классы Swing
Создание окна import java.awt.Dimension; import java.awt.Toolkit; import javax.swing.*; public class SampleWindow{ public static void main( String []args ){ Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); Dimension windowSize = new Dimension( 150, 50 ); JFrame frm = new JFrame( Caption ); frm.setSize( windowSize ); frm.setLocation( d.width/2 - windowSize.width/2, d.height/2 - windowSize.height/2 ); frm.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); frm.add( new JLabel("test", SwingConstants.CENTER) ); frm.setVisible( true ); }
Создание диалога import javax.swing.*; public class SampleDlg{ public static void main(String[] args) { JDialog dlg = new JDialog( (JWindow)null, "Main window" ); dlg.setDefaultCloseOperation( JFrame.DISPOSE_ON_EXIT ); dlg.setSize( 200, 200 ); dlg.setVisible( true ); }
Модальные диалоги и стандартные сообщения Варианты конструктора JDialog: JDialog(); JDialog( Window parent ); JDialog( Window parent, String title, ModalityType modalType ); Варианты ModalityType: APPLICATION_MODAL – для блокирования всех остальных окон приложения; DOCUMENT_MODAL – для блокирования текстового ввода для всех окон данного документа; MODELESS – немодальный диалог; TOOLKIT_MODAL – блокирование всех окон, созданных для данного экземпляра Toolkit
Менеджеры компоновки BorderLayout (по умолчанию): JPanel p = frm.getContentPane(); p.setLayout( new BorderLayout() ); //Центральная область: p.add( new JLabel(center text) ); //Нижняя область («юг»): p.add( new JLabel(bottom text), BorderLayout.SOUTH ); Константы BorderLayout: NORTH, SOUTH, EAST, WEST, CENTER
Менеджеры компоновки GridLayout (сетка или таблица с фиксированными ячейками): JPanel p = frm.getContentPane(); p.setLayout( new GridLayout(2,2) ); p.add( new JLabel(1) ); p.add( new JLabel(2) ); p.add( new JLabel(3) ); p.add( new JLabel(4) );
Менеджеры компоновки GridBagLayout: GridBagLayout l = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); p.setLayout( l ); c.gridwidth = 1; c.gridheight = 1; c.weightx = 1.0; c.weighty = 1.0; c.fill = GridBagConstraints.NONE; JLabel l1 = new JLabel(1); JLabel l2 = new JLabel(1); JLabel l3 = new JLabel(1); l.setConstraints( l1, c ); p.add( l1 ); c.gridwidth = GridBagConstraints.REMAINDER; l.setConstraints( l2, c ); p.add( l2 ); l.setConstraints( l3, c ); p.add( l3 );
Менеджеры компоновки GridBagLayout: GridBagLayout l = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); p.setLayout( l ); c.gridwidth = 1; c.gridheight = 1; c.weightx = 1.0; c.weighty = 1.0; c.gridx = 1; c.gridy = 1; c.fill = GridBagConstraints.HORIZONTAL; JLabel l1 = new JLabel(1); c.gridx++; JLabel l2 = new JLabel(1); c.gridx = 1; c.gridy++; c.gridwidth = 2; JLabel l3 = new JLabel(1); l.setConstraints( l1, c ); p.add( l1 ); c.gridwidth = GridBagConstraints.REMAINDER; l.setConstraints( l2, c ); p.add( l2 ); l.setConstraints( l3, c ); p.add( l3 );
Обработка событий import java.awt.event.*; import javax.swing.*; public class SampleFrame extends JFrame implements ActionListener{ JButton m_btnClose = new JButton( Close window ); public SampleFrame(){ super( Sample frame ); m_btnClose.addActionListener( this ); setSize(…); setDefaultCloseOperation(…); getContentPane().add( buttons, BorderLayout.SOUTH ); setVisible( true ); } public void actionPerformed( ActionEvent e ){ if( e.getSource() == m_btnClose ){ dispose(); }
Обработка событий Создание слушателей через анонимные классы: import java.awt.event.*; final JFrame frm = this; JButton btn = new JButton(close); btn.addActionListener( new ActionListener(){ public void actionPerformed( ActionEvent e ){ frm.dispose(); } } );
Задание Разработать программу для создания главного окна программы: По событию от кнопки «отправить», требуется Отобразить модальное окно диалога с элементом JLabel. Текст для JLabel должен быть подставлен из нижний области JTextArea. Заголовок модального окна должен содержать текст из поля «Тема».