Освоение графического интерфейса
.pdf
Она означает, что теперь никакие layout (менеджеры размещения элементов) применятся не будут, а размещаемые элементы нужно будет размещать вручную.
III.Добавление на форму метки.
Для каждого поля мы будем на форму добавлять 2 элемента – метку, с текстом, поясняющим смысл текста, и элемент редактирования поля с собственно текстом. Сначала добавим метку.
1.На панели Palette выберем компонент JLabel – для этого кликнем по нему левой кнопкой мыши:
11
2. При помощи курсора мыши выберем место для метки на форме:
3.После фиксации элемента требуется ввести текст. В данном примере текстом будет «Предмет:»
12
4.После нажатия Enter текст зафиксируется и форма примет следующий вид:
Заглянем в код функции initialize() после этого добавления: private void initialize() {
frame = new JFrame(); frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(null);
JLabel label = new Label("\u041F\u0440\u0435\u0434\u043C\u0435\u0442:"); label.setBounds(49, 50, 56, 16);
frame.getContentPane().add(label);
}
В код были добавлены следующие строки:
JLabel label = new Label("\u041F\u0440\u0435\u0434\u043C\u0435\u0442:"); label.setBounds(49, 50, 56, 16);
frame.getContentPane().add(label);
Строка JLabel label = new Label("\u041F\u0440\u0435\u0434\u043C\u0435\u0442:");
создает метку с текстом. Поскольку текст на русском языке, то он представлен в Unicode.
Строка label.setBounds(49, 50, 56, 16);
задает размещение и границы метки.
Последняя строка frame.getContentPane().add(label);
добавляет на форму frame метку. Метка будет размещена на форме согласно текущему layout. Поскольку до этого layout был отменен строкой
13
frame.getContentPane().setLayout(null);
то для размещения label на frame будут использоваться координаты из строки кода:
label.setBounds(49, 50, 56, 16);
IV. Добавление на форму элемента редактирования поля.
1.На панели Palette выберем компонент JTextField – для этого кликнем по нему левой кнопкой мыши:
14
2. При помощи курсора мыши выберем место для элемента на форме:
Обратите внимание на вертикальное выравнивание текста метки и текста добавляемого элемента – их нужно выравнивать так, как показано на рисунке – должна появиться линия подчеркивающая текст в метке.
3. После добавления элемента форма примет такой вид:
15
4.Чтобы изменить местоположение элемента и его размеры нужно выйти из режима ввода текста. Для этого можно нажать Esc, либо изменить фокус ввода, щелкнув в любой другой элемент. В итоге форма приобретет такой вид:
5.Чтобы изменить местоположение элемента нужно щелкнуть по нему левой кнопкой:
16
6. После этого можно изменять местоположение и размеры элемента:
7.Элементу редактирования нужно задать осмысленное имя, чтобы впоследствии в коде его можно было легко использовать. Для этого нужно кликнуть элемент правой кнопкой мыши и в меню выбрать пункт Rename:
17
8.В открывшемся окне вводим новое имя. В данном примере новое имя subjectTextField:
Посмотрим на изменения кода теперь.
Во-первых в классе RecordLab1GUI добавилось еще одно приватное поле subjectTextField:
public class RecordLab1GUI {
private JFrame frame;
private JTextField subjectTextField;
Во-вторых в метод добавился код, отвечающий за создание и инициализацию нового элемента:
private void initialize() { frame = new JFrame();
frame.setBounds(100, 100, 450, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(null);
JLabel label = new Label("\u041F\u0440\u0435\u0434\u043C\u0435\u0442:"); label.setBounds(49, 50, 56, 16);
frame.getContentPane().add(label);
subjectTextField = new JTextField(); subjectTextField.setBounds(130, 47, 198, 22); frame.getContentPane().add(subjectTextField); subjectTextField.setColumns(10);
}
V.Добавление на форму элементов для оставшихся полей.
18
1.Применяя шаги аналогичные разделам III и IV нужно добавить метки и элементы редактирования для всех полей. В итоге получится такой вид формы:
Код класса также изменится. В частности будут добавлены приватные поля для всех элементов редактирования:
public class RecordLab1GUI {
private JFrame frame;
private JTextField subjectTextField; private JTextField tutorTextField; private JTextField numberLabsTextField; private JTextField doneLabsTextField;
В методе initialize появится код, который обеспечивает создание всех элементов и их инициализацию:
private void initialize() { frame = new JFrame();
frame.setBounds(100, 100, 450, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(null);
JLabel label = new JLabel("\u041F\u0440\u0435\u0434\u043C\u0435\u0442:");
label.setBounds(22, 16, 56, 16); frame.getContentPane().add(label);
subjectTextField = new JTextField();
19
subjectTextField.setBounds(175, 13, 198, 22); frame.getContentPane().add(subjectTextField); subjectTextField.setColumns(10);
JLabel label_1 = new JLabel("\u041F\u0440\u0435\u043F\u043E\u0434\u0430\u0432\u0430\u0442\u0435\u043B\u044 C:");
label_1.setBounds(22, 51, 96, 16); frame.getContentPane().add(label_1);
JLabel label_2 = new JLabel("\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043B\u0430\u0431.\u0440\u0430\u0431.:");
label_2.setBounds(22, 91, 139, 16); frame.getContentPane().add(label_2);
JLabel label_3 = new JLabel("\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0441\u0434\u0430\u043D\u043D\u044B\u0445:");
label_3.setBounds(22, 126, 139, 16); frame.getContentPane().add(label_3);
tutorTextField = new JTextField(); tutorTextField.setBounds(175, 48, 198, 22); frame.getContentPane().add(tutorTextField); tutorTextField.setColumns(10);
numberLabsTextField = new JTextField(); numberLabsTextField.setBounds(175, 88, 198, 22); frame.getContentPane().add(numberLabsTextField); numberLabsTextField.setColumns(10);
doneLabsTextField = new JTextField(); doneLabsTextField.setBounds(175, 123, 198, 22); frame.getContentPane().add(doneLabsTextField); doneLabsTextField.setColumns(10);
}
20
