Компонент – элемент графического интерфейса, который можно использовать независимо от других: кнопка, строка меню, текстовое поле, полоса прокрутки, переключатель.
Контейнер – компонент, который предназначен для хранения других элементов.
Компонент должен обязательно помещен в контейнер (он знает как их рисовать). (Бывает невидимым). Поэтому компонент должен быть помещен в контейнер. Контейнер – тоже компонент, поэтому может содержать другие контейнеры (иерархия контейнеров). В верхней части иерархии – контейнер верхнего уровня. Он не входит в другой контейнер.
1. Контейнеры верхнего уровня Swing-тяжелые.
Любая иерархия начинается с них.
2. Легкие контейнеры – наследники JComponent: JPanel, JScrollPane, JRootPane. Они могут содержаться внутри другого контейнера (для создания групп связанных компонентов и помещения их внутрь внешнего контейнера).
3. Легкие компоненты Swing- производятся от JComponent (кроме контейнеров верхнего уровня). Swing – лежит в пакете javax.swing, классы начинаются с буквы J:
JButton, JList, JCheck, JFrame, JLabel, JTextArea, JTextField, JMenu, JTree, JTable.Построены по архитектуре MVC – Mode l-View-Control
V и C объединены вместе и называются-делегат. Model (хранит состояние объекта) – UI Delegate (отвечает за внешний вид). Это архитектура разделеной модели (модель-делегат).
Окно верхнего уровня – фрейм.
В AWT – Frame;
В Swing – JFrame.
Пример простейшего окна при использовании наследования.
import javax.swing.*
class SimpleFrame extends JFrame{//класс определяет ГИП
public SimpleFrame (){ //конструктор
setSize (300,200); //размеры окна- по умолч.размер 0 Х 0
}
}
public class SimpleFrame Test {// класс запускает программу
public static void main (String [] args) {
SimpleFrame frame1 = new SimpleFrame ();
frame1.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame1.setVisible (true); //после этого запустится thread GUI.
frame.setLocation (100,200);
}
}//закончился основной поток, поток ГИП продолжает работать
Строка заголовка и пиктограммы размеров окна отображаются ОС. Внутренность окна – библиотекой Swing. Варианты:
- метод main () может быть внутри класса JFrame. (нежелательно).
- все, кроме создания фрейма (new SimpleFrame ()) может быть в конструкторе (нежелательно).
- может использоваться не наследование, а композиция:
class SwingDemo{
SwingDemo () {//конструктор
JFrame jframe = new JFrame();
jframe.setSize (300,200);
jframe.setVisible (true);
jframe.setDefault......
…
}
public static void main (…) {
new Swing Demo ();
}
}