Главная » 2015 » Ноябрь » 5 » Как в Java создать графический интерфейс Swing
20:46
Как в Java создать графический интерфейс Swing

Как в Java создать графический интерфейс Swing

2 методика:Создание общего фреймаПрограммирование ответов на действия пользователя

В этой статье объясняется, как создать простое приложение, которое показано на рисунке справа, и приводится его исходный код.


Чтобы размещать кнопки, текстовые надписи и другие компоненты в окне программы, вам следует понять, как работает JPanel. Это что-то вроде контейнера для компонентов, который занимает прямоугольную область экрана и показывает компоненты, выровненные по какому-то простому принципу. Как именно выровнены компоненты, зависит от типа схемы размещения, которую вы установили для панели. Для простых задач программирования вам следует знать, как минимум, BorderLayout, который располагает компоненты по краям и один большой компонент ставит в середину, затем FlowLayout, который обычно располагает компоненты в ряд по горизонтали, и, наконец, GridLayout, который располагает компоненты в произвольной таблице n * m. Есть другие типы, но они слишком сложны для новичков. Ключевая идея в том, что "компонентой" может быть не только кнопка или флажок, но и другая JPanel. Вы можете получить достаточно сложный пользовательский интерфейс, просто расположив панели одна на другой и выбрав для них планировку.


Если у вас есть экземпляр объекта JPanel, вызовите метод .setLayout, чтобы установить тип планировки, и затем метод .add, чтобы добавить на панель компоненты. В случае BorderLayout в качестве второго параметра вам нужно будет передать положение. Например, чтобы расположить кнопку в верхней части, вызовите myPanel.add(myButton, BorderLayout.North).


Контейнер самого высокого уровня, который появляется на экране, представляющем приложение Java, является экземпляром JFrame, а не JPanel. Чтобы добавить вашу основную панель в экземпляр JFrame просто вызовите myJFrame.getContentPane().add(myJPanel, BorderLayout.Center).


Чтобы заставить ваше приложение делать что-то большее, чем просто появляться, вам нужно будет понять интерфейс ActionListener. У любого неабстрактного ActionListener есть только один метод actionPerformed, который вызывается, когда пользователь выполняет "действие" над компонентой, в которой зарегистрирован слушатель (например, действие над кнопкой - это, очевидно, ее нажатие). Чтобы зарегистрировать слушателя действий для кнопки или любого другого компонента, вызовите метод .addActionListener..

Шаги

Метод 1 из 2: Создание общего фрейма

  1. 1 Создайте класс, который расширяет класс JFrame. Этот класс будет содержать все ваши компоненты графического интерфейса (GUI), такие как кнопки и текстовые поля.
  2. 2 Продумайте общий внешний вид вашего первого приложения. Неплохо было бы начать с центральной панели типа BorderLayout с другой панелью в нижней ее части (BorderLayout.South). Эта вторая панель будет иметь тип FlowLayout и содержать несколько кнопок, флажков и других контрольных элементов. И наконец, расположите большой компонент JTextArea посередине центрального компонента. Чтобы взаимодействовать с пользователем посредством текста, вы сможете использовать методы getText() и setText().
  3. 3 Напишите конструктор для вашего класса. Этот конструктор должен создать все панели и компоненты, которые вы запланировали, расположить их правильно и добавить последнюю панель, которая "прикрепляет все" к вашему фрейму (myFrame.getContentPane().add(myLargePanel, BorderLayout.Center).
  4. 4 Напишите метод main, который будет точкой входа программы. В этом методе создайте экземпляр фрейма, установите его начальные размер и положение (используйте .setSize(x,y) и .setLocation(width, height) ), и заставьте его появиться на экране, вызвав .setVisible(true).

Метод 2 из 2: Программирование ответов на действия пользователя

  1. 1 Сделайте ваш фрейм реализующим интерфейс ActionListener. Это позволит вашему классу "слушать" действия компонентов.
  2. 2 Для каждой кнопки, флажка или другого контрольного элемента, которых вы создали, вызовите метод .addActionListener, передав ваш фрейм (this) в качестве параметра.
  3. 3 Переопределите абстрактный метод класса ActionListener, который называется actionPerformed(ActionEvent event). В этом методе вам следует добавить условные выражения 'if', чтобы проверить, откуда пришло событие. В этом условном операторе 'if' должно быть условие вроде такого: "if (event.getSource() == button1)". Здесь проверяется, откуда пришло событие, и пришло ли оно от кнопки. Внутри выражения 'if' выполняйте любые действия, которые вам необходимы при нажатии на кнопку.

  4. 4 У JTextArea есть метод .setText("myText"), который является неплохим способом запрограммировать какой-то видимый ответ на ваше действие.

Советы

  • Совсем не намного сложнее реализовать интерфейс MouseListener и использовать .addMouseListener, чтобы зарегистрировать его для любой компоненты.
  • Если вам нужно запросить от пользователя ввести какую-то строку, вызовите статический метод JOptionPane.showInputDialog(this, "My message"). первым параметром должен быть фрейм вашего приложения или какая-нибудь панель (поле для ввода появится посередине родительского элемента). Метод возвращает значение, которое пользователь ввел в диалоговом окне.
  • Вполне возможно разместить все компоненты на одной панели, использующей тип GridBagLayout, но этим классом труднее управлять.
  • Если вы хотите нарисовать собственные графические объекты (например, шахматную доску), почитайте о компоненте Canvas. Он может быть размещен в вашем приложении, как любой другой компонент, но вам нужно будет написать метод .paint, который полностью отвечает за его отрисовку.
  • Во многих реальных приложениях наиболее полезным компонентом Swing является JTable. После изучения основ, продолжайте работать с ним.

Предупреждения

  • Некоторые средства разработки предлагают возможность составить графический интерфейс Swing способом, "удобным для пользователя". Однако, зачастую они не могут должным образом сделать панель с продвинутыми возможностями. Эти возможности включают деревья, таблицы, списки и комбинированные списки, которые меняют свое содержимое по мере работы программы, а также компоненты с моделями данных пользователя и т.д. Код, написанный при таком "дружеском для пользователя" способе, станет настоящим кошмаром, если вам потом потребуется дописать его вручную. Поэтому слишком не увлекайтесь подобными "дизайнерами графического интерфейса, дружественными для пользователя", потому что это ограничит ваши возможности из-за их ограниченных возможностей.
  • Swing - это однопоточное приложение. Если обработка действия у вас занимает слишком много времени, оно "зависнет", пока не произойдет выход из метода .actionPerformed. Изучайте и используйте многопоточность java, чтобы Swing оставался "живым", пока работает какой-то трудоемкий процесс.
  • Большинство методов компонентов Swing можно безопасно вызвать только из потока диспетчеризации событий (метод .actionPerformed и другие похожие методы слушателя). Если вам нужно вызвать их из какого-то другого потока (например, чтобы обновить индикатор прогресса или показать результаты какого-то длительного процесса), почитайте о SwingUtils.invokeLater.
Категория: Вопросы и ответы | Просмотров: 481 | | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]