Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Освоение графического интерфейса

.pdf
Скачиваний:
59
Добавлен:
15.05.2015
Размер:
4 Мб
Скачать
☆

Она означает, что теперь никакие 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