// Box1.java. // Блочное расположение. // получаем панель содержимого. // устанавливаем блочное расположение по оси Y (столбиком)
// Box1. java // Блочное расположение import javax. swing. *; import java. awt. *;
public class Box1 extends JFrame { public Box1() { super(" Box1 - Y" ); setSize(400, 200); setDefaultCloseOperation( EXIT_ON_CLOSE ); // получаем панель содержимого Container c = getContentPane(); // устанавливаем блочное расположение по оси Y (столбиком) BoxLayout boxy = new BoxLayout(c, BoxLayout. Y_AXIS); c. setLayout(boxy); // добавляем компоненты c. add(new JButton(" Один" )); c. add(new JButton(" Два" )); c. add(new JButton(" Три" )); // выводим окно на экран setVisible(true); } static class Box2 extends JFrame { public Box2() { super(" Box2 - X" ); // устанавливаем размер и позицию окна setSize(400, 200); setLocation(100, 100); setDefaultCloseOperation( EXIT_ON_CLOSE); // получаем панель содержимого Container c = getContentPane(); // устанавливаем блочное расположение по оси X (полоской) BoxLayout boxx = new BoxLayout(c, BoxLayout. X_AXIS); c. setLayout(boxx); // добавляем компоненты c. add( new JButton(" Один" )); c. add( new JButton(" Два" )); c. add( new JButton(" Три" )); // выводим окно на экран setVisible(true); } } public static void main(String[] args) { new Box1(); new Box2(); } }
В этом примере создаются два окна. В одном из них реализовано блочное расположение по оси Y, в другом — блочное расположение по оси X. Как легко убедиться, при блочном расположении компоненты действительно размещаются вплотную друг к другу.
Вы можете видеть, что конструктор класса BoxLayout несколько необычен — ему необходимо указать контейнер, в котором он будет функционировать. Ни в одном из рассмотренных нами прежде менеджеров расположения такого не требовалось.
Остальные менеджеры используются реже, остаются на самостоятельное рассмотрение. Наиболее популярные элементы пользовательского интерфейса
ЛАБОРАТОРНАЯ РАБОТА 4 (часть 2) 4. 3. События и их обработка
Во всех предыдущих примерах кнопки присутствовали, но были бесполезными — они ничего не делали. В следующем примере кнопка получит связанное с ней действие — при ее нажатии программа будет завершаться. Этого можно добиться несколькими разными способами, здесь будет приведен один из наиболее распространенных. Этот способ возлагает обязанности обработчика события кнопки на объект безымянного класса (безымянного потому, что объект такого класса создается всего в одном месте программы, и нам нет необходимости именовать этот класс, так как на него не нужно нигде ссылаться). Пример 4. 9 (события) public static void main(String[] args) { JFrame f = new JFrame(); JPanel p = new JPanel(); JButton b = new JButton(" Press me! " ); b. addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System. exit(0); } }); p. add(b); f. setSize(300, 200); f. add(p); f. setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE); f. setVisible(true); } Чтобы это работало, нужно в начало файла (после import javax. swing. *; ) добавить import java. awt. event. *;. Безымянный ( анонимный ) класс здесь описывается прямо в операции new после ActionListener(), что указывает на то, что создается новый анонимный (безымянный) класс реализующий интерфейс ActionListener, который имеет метод actionPerformed — именно этот метод вызывается при наступлении события, например, нажатия кнопки. При этом операция new создает объект такого класса и возвращает ссылку на этот объект; в данном примере ссылка передается методу addActionListener() кнопки, и объект безымянного класса регистрируется как слушатель кнопочного события. Таких " слушателей" может быть сколько угодно, и каждый раз после нажатия кнопки у каждого из них вызывается метод actionPerformed(). В качестве очередного примера напишем программу, в которой при каждом нажатии на кнопку меняется надпись на кнопке (для простоты чередуются «Hello! » и «GoodBye! »). Пример 4. 10
public static void main(String[] args) { JFrame f = new JFrame(); JPanel p = new JPanel(); JButton b = new JButton(" Hello! " );
b. addActionListener(new ActionListener() { boolean flag = true; public void actionPerformed(ActionEvent e) { flag =! flag; ((JButton) e. getSource()). setText(flag? " Hello! " : " Goodbye! " ); } }); p. add(b); f. setSize(300, 200); f. add(p); f. setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE); f. setVisible(true); } } Задача для самостоятельного решения на заняти 4. 3 Написать программу, при запуске которой в главном окне появляется кнопка, на которой написано 10, и при каждом нажатии это число уменьшается на 1, до тех пор, пока оно не станет равно 1. В этом случае при нажатии на кнопку программа завершается.
Не всегда, однако, удается обойтись безымянным классом обработчика событий. Тогда приходится писать явный класс. В качестве примера рассмотрим программу с двумя кнопками, в которой каждая кнопка меняет текст на другой кнопке.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|