что такое frames в java
Фреймы и графика для Java
В Java окно верхнего уровня (не содержащееся в другом окне) называется фреймом. В отличие от апплетов графические приложения, расширяющие класс java.awt.Frame или его подкласс jawax.swing.JFrame, не нуждаются в браузере. Для создания графического интерфейса приложения необходимо предоставить ему в качестве окна для вывода объект Frame или JFrame, в который будут помещаться используемые приложением компоненты GUI (Graphics User Interface). Большинство своих методов класс Frame наследует по иерархии от классов Component, Container и Window. Класс JFrame из библиотеки Swing является подклассом класса Frame.
Такое приложение запускается с помощью метода main() и само отвечает за свое отображение в окне Frame или JFrame.
/* пример # 9 :простейший фрейм – овалы и дуги : FrameDemo.java */
public class FrameDemo extends JFrame <
private String msg = «My Windows-Application»;
public void paint(Graphics g) <
g.drawString(msg, 59, diam + 52);
g.drawLine(59, diam + 56, 190, diam + 56);
public void drawSphere(Graphics g, int diam) <
Похожие посты:
Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.
2 коммент. »
У меня эта програмка не сработала – выдала массу ошибок
У меня тоже не работало.
Чтобы заработало, я заменил в исходнике знаки тире на минусы. Заработало. Хоть и не идеально.
JFrame в Java
Введение в JFrame в Java
JFrame также известен как контейнер верхнего уровня Swing. Swing ссылается на GUI-инструмент виджета для создания приложений в JAVA. Качели легкие и независимые. Класс JFrame в приложении может быть создан следующим образом
Открытый класс JFrame расширяет Frame реализует WindowConstants, Accessible, RootPaneContainer
Конструктор JFrame
Конструктор JFrame и его описания приведены ниже.
Методы JFrame
Класс JFrame предоставляет некоторые методы, которые играют важную роль в работе с JFrame.
Примеры JFrame в Java
Вот следующие примеры упоминания ниже
Пример № 1
Пожалуйста, смотрите ниже приведенный пример
import javax.swing.*;
public class demoJFrame extends JFrame(
JFrame frame;
demoJFrame()(
setTitle(«A Sample JFrame Window»);
JButton button = new JButton(«click»);
button.setBounds(100, 100, 115, 55);
add(button);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setLayout(null);
setVisible(true);
)
public static void main(String() args)(
new demoJFrame();
)
)
В приведенном выше примере библиотека свинга импортируется для включения различных классов для работы с Frame & событиями. На скриншоте ниже кадр создается с использованием классов свинг-классов JFrame.
Пример № 2
В этом примере используется несколько методов классов JFrame, Layout & Events для создания форм внутри фрейма.
import javax.swing.*;
import java.awt.event.*;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
public class JFrameDemo(
public static void main(String() args)(
// Create frame with title Registration Demo
JFrame frame= new JFrame();
frame.setTitle(«JFrame Based Contact Form»);
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
JPanel headingPanel = new JPanel();
JLabel headingLabel = new JLabel(«Contact Us Panel»);
headingPanel.add(headingLabel);
JPanel panel = new JPanel(new GridBagLayout());
// Constraints for the layout
GridBagConstraints constr = new GridBagConstraints();
constr.insets = new Insets(5, 5, 5, 5);
constr.anchor = GridBagConstraints.WEST;
// Setting initial grid values to 0, 0
constr.gridx=0;
constr.gridy=0;
JLabel nameLabel = new JLabel(«Enter your name :»);
JLabel emailLabel = new JLabel(«Enter your email :»);
JLabel phoneLabel = new JLabel(«Enter your phone :»);
JLabel msgLabel = new JLabel(«Message :»);
JTextField nameInput = new JTextField(20);
JTextField emailInput = new JTextField(20);
JTextField phoneInput = new JTextField(20);
JTextArea textArea = new JTextArea(5, 20);
panel.add(nameLabel, constr);
constr.gridx=1;
panel.add(nameInput, constr);
constr.gridx=0; constr.gridy=1;
panel.add(emailLabel, constr);
constr.gridx=1;
panel.add(emailInput, constr);
constr.gridx=0; constr.gridy=2;
panel.add(phoneLabel, constr);
constr.gridx=1;
panel.add(phoneInput, constr);
constr.gridx=0; constr.gridy=3;
panel.add(msgLabel, constr);
constr.gridx=1;
panel.add(textArea, constr);
constr.gridx=0; constr.gridy=4;
constr.gridwidth = 2;
constr.anchor = GridBagConstraints.CENTER;
// Button with text «Register»
JButton button = new JButton(«Submit»);
// add a listener to button
button.addActionListener(new ActionListener()
(
public void actionPerformed(ActionEvent e)
(
headingLabel.setText(«Thanks for Contacting us. We’ll get back to you shortly.»);
nameInput.setText(«»);
emailInput.setText(«»);
phoneInput.setText(«»);
textArea.setText(«»);
)
));
panel.add(button, constr);
mainPanel.add(headingPanel);
mainPanel.add(panel);
frame.add(mainPanel);
frame.pack();
frame.setSize(500, 500);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
)
)
В приведенном выше примере оконная рама создается с использованием JFrame. & создание элементов с использованием методов класса JPanel (). другие библиотеки используются для макета и событий. Ниже приведен скриншот, прикрепленный после компиляции и запуска кода Java.
Рекомендуемые статьи
Базовый фрейм JFrame
Базовый фрейм base-jframe, выполненный по технологии OSGi, позволяет формировать графический интерфейс главного фрейма приложения JaBricks в виде объекта типа JFrame библиотеки Swing и осуществлять диспетчеризацию управления другими программными модулями приложения. Основные функциональные свойства базового фрейма JaBricks обеспечивают :
Стиль представления
Параметры интерфейса фрейма, определяющие стиль представления компонентов и выделения в них записей, можно настроить без перекомпиляции платформы. Настройки стилей фрейма хранятся в файле configuration/style.txt в формате «ключ=значение». Данный файл создается автоматически с записями используемых стилей по умолчанию.
Меню и панель инструментов
Интерфейс приложения может включать как главное меню, так и панель инструментов. Структуру меню и панели инструментов определяет разработчик в конфигурации приложения. При выборе пунктов меню и/или нажатии на кнопках панели инструментов стартуют связанные с ними бандлы приложения. Таким образом, главный фрейм организует запуск бандлов приложения.
Локализация интерфейса
При старте приложения базовый фрейм получает от модуля ресурсов объект локализации Locale, в соответствии с которым определяются наименования пунктов меню и подсказки кнопок панели инструментов. Кроме этого, базовый фрейм может быть подписан на событие изменения языка локализации в режиме run-time. При получении сообщения об изменении языка локализации заголовок фрейма, пункты главного меню и подсказки кнопок панели инструментов локализуются согласно значению новой Locale.
Логирование сообщений
Базовый фрейм при старте подключается к сервису логирования фреймворка. Дальнейший процесс логирования связан только с отправкой соответствующих сообщений в сервис.
Контейнер фрейма
Графические бандлы приложения могут создавать интерфейс двух типов : в виде отдельного всплывающего диалогового окна типа JDialog и в виде панели типа JPanel, встраиваемую в контейнер фрейма приложения JFrame. Поскольку бандлы могут общаться друг с другом только с помощью сообщений, то взаимодействие бандлов с базовым фреймом осуществляется посредством механизма публикации/подписки. Базовый фрейм подписывается на запрос контейнера, а бандлы, использующие базовый фрейм для формирования своей интерфейсной составляющей, отправляют запросы на получение контейнера фрейма. При поступлении такого сообщения фрейм отправляет соответствующему бандлу контейнер, в котором бандл размещает свой графический интерфейс; предыдущую интерфейсную панель базовый фрейм удаляет из контейнера, а связанный с панелью бандл останавливает.
Завершение работы приложения
При завершении работы активатор останавливае все подписчики, после этого останавливает фреймворк. Завершение работы (остановку) стартованных бандлов выполняет останавливающийся фреймворк Felix.
Примечание : базовый фрейм не может самостоятельно выполнять функции главного фрейма приложения JaBricks. Он только включает необходимые классы, методы и сервисы, которые используются его наследником для создания функционирующего главного модуля приложения Jabricks. Базовый фрейм следует использовать в качестве родителя, наследник которого создает главный фрейм приложения.
Структура базового фрейма
На следующем скриншоте представлена структура базового фрейма в виде проекта в IDE Eclipse.
В состав базового фрейма входят :
Базовые модули | |
JBFrameActivator | класс активатора базового фрейма |
JBFrame | класс интерфейсного фрейма JFrame |
Модули публикации и подписки | |
ConnectSubscriber | класс подписки на сообщения подключения к серверу БД или отключения от сервера БД |
ContainerSubscriber | класс подписки на сообщение запроса контейнера JFrame |
EventPublisher | класс публикации сообщениий главного фрейма |
LocaleSubscriber | класс подписки на сообщение изменения языка локализации приложения Locale |
StartTimeSubscriber | класс подписки на запрос времени старта программы |
Класс активатора базового фрейма, JBFrameActivator
Класс активатора включает переменные и методы. Ниже в табличном виде представлены переменные и методы с модификаторами public и protected, которые будут доступны в наследниках класса.
Переменные активатора базового фрейма
В следующей таблице представлены переменные активатора базового фрейма. Сервис logService позволяет логировать сообщения. Сервисы фрейма (service_locale, service_connect, service_container, service_starttime) используются для «подписки» на определенные сообщения. Слушатели событий (menuListener, toolbarListener, windowListener) реагируют на связанные с ними события. Все переменные доступны в наследниках. Инициализация сервисов и слушателей выполняется методами, представленными ниже.
Модификатор | Тип переменной | Наименование | Описание |
---|---|---|---|
protected | BundleContext | context | Контекст бандла, позволяет получить информацию о всем модулях приложения согласно спецификации OSGi |
protected | JFrame | frame | Фрейм приложения |
protected | long | start_time | Время старта приложения |
protected | LogService | logService | Сервис логирования сообщений |
protected | ServiceRegistration | service_locale | Сервис локализации |
protected | ServiceRegistration | service_connect | Сервис подписки на подключение к серверу БД (или отключения) |
protected | ServiceRegistration | service_container | Сервис подписки на запрос контейнера фрейма (JFrame.getContentPane) |
protected | ServiceRegistration | service_starttime | Сервис подписки на запрос времени старта приложеня |
protected | ActionListener | menuListener | Слушатель событий вызова меню |
protected | ActionListener | toolbarListener | Слушатель событий нажатия кнопки панели инструментов |
protected | WindowListener | windowListener | Слушатель событий окна |
Методы активатора базового фрейма
В таблице представлены методы, определенные интерфейсами BundleActivator, ServiceListener и реализующие платформу Jabricks. Эти методы будут доступны в наследниках класса.
Модификатор | Метод | Описание |
---|---|---|
Методы интерфейса BundleActivator | ||
public | void start(BundleContext context) throws Exception | Метод вызывается фреймворком OSGi при старте бандла |
public | void stop(BundleContext context) throws Exception | Метод вызывается фреймворком OSGi при останове бандла |
Метод интерфейса ServiceListener | ||
public | void serviceChanged(ServiceEvent event) | Метод вызывается фреймворком OSGi при регистрации/разрегистрации сервиса |
Методы платформы Jabricks | ||
public | BundleContext getBundleContext() | Метод получения бандла базовго фрейма |
public | void logMessage(int level, String message) | Метод логирования сообщений |
protected | void createMenuListener() | Метод создания слушателя меню |
protected | void createToolbarListener() | Метод создания слушателя панели инструментов |
protected | void createWindowListener() | Метод создания слушателя окна фрейма |
protected | void createConnectSubscriber() | Метод создания подписчика на событие подключения к серверу и отключения от сервера БД |
protected | void createLocaleSubscriber() | Метод создания подписчика на событие смены языка локализации |
protected | void createJFrameSubscriber() | Метод создания подписчика на запрос контейнера фрейма |
public | void sendContainerEvent(final String symbolicName, final String version, final String component ) | Метод отправки сообщения с контейнером фрейма бандлу с соответствующими значениями symbolicName и version |
public | void sendStartTimeEvent() | Метод отправки сообщения с временем старта приложения |
public | void changeLocale(Locale locale) | Метод изменения локализованных надписей интерфейса согласно текущей Local |
public | void changeConnect() | Метод отработки события подключения или отключения от сервера БД |
protected | void closeConnectionSQL() | Метод закрытия соедининия с сервером БД |
protected | void saveJFrameData() | Метод сохранения данных фрейма |
protected | void stop() | Метод остановки бандла |
Примечание :
1. Активатор базового фрейма JBFrameActivator включает закрытые методы подключения с сервису логирования фреймворка и завершения его работы. Эти методы вызывается автоматически при старте бандла и при закрытии окна фрейма JFrame. Открытый метод logMessage обеспечивает логирование сообщений.
2. При старте бандла автоматически стартует подписчик (StartTimeSubscriber) на сообщение запроса «времени старта» приложения. При поступлении данного запроса вызывается метод активатора sendStartTimeEvent(). При останове бандла данный сервис подписки также будет остановлен.
3. Завершить работу фрейма можно либо по нажатию на одной из кнопок панели инструментов или выбора пункта меню, либо нажатии на кнопку закрытия окна (правый верхний угол). Слушатели соответствующих событий вызывают метод stop, который завершает работу всех подписчиков, отключается от сервиса логирования и останавливает фреймворк.
4. Вызываемый при останове бандла метод saveJFrameData можно использовать для сохранения данных главного фрейма во внешнем файле, чтобы при очередном старте их можно было бы восстановить.
Листинг базового активатора фрейма, JBFrameActivator
Для реализации функций подписки и публикации активатор использует константные значения интерфейса IWidgetsConstants библиотеки gui-widgets. В листинге активатора для наглядности представления приведены переменные и методы (без кода).
Для сохранения данных бандла во внешнем файле необходимо переопределить метод saveJFrameData(), в котором вызывать одноименный метод интерфейсного класса JBFrame.
Класс базового фрейма JBFrame
В таблице представлены доступные методы интерфейсного класса базового фрейма JBFrame :
Модификатор | Метод | Описание |
---|---|---|
public | void createJFrame() | метод создания фрейма JFrame |
public | void createJFrame (ActionListener mListener, ActionListener tListener) | метод создания фрейма JFrame |
public | void saveJFrameData() | Метод сохранения данных фрейма |
public | void createMenu (ActionListener mListener) | Метод создания главного меню |
public | void createToolbar(ActionListener tListener) | Методы создания панели инструментов |
public | MenuService getMenuService() | Метод получения объекта главного меню |
public | ToolbarService getToolbarService() | Метод получения объекта панели инструментов |
public | void changeConnect (Properties props) | Методы обработки события подключения к серверу БД |
public | void changeLocale (Locale locale) | Методы обработки событий изм енения языка локализации |
public | void formCentering(int width, int height) | Центрирование фрейма |
protected | void writeDocument(Document document, String path) | Метод сохранения данных фрейма в формате XML |
protected | Document readJFrameData() | Метод чтения данных фрейма |
Для сохранения данных активатор должен вызвать метод saveJFrameData, в котором выполняется упаковка данных в объект типа Document, после чего вызывается метод writeDocument для сохранения созданного документа (doc) в файл (path). Переопределив метод writeDocument Вы можете внести изменения в содержимое doc и сохранить собственные данные, которые при следующем старте бандла можно будет восстановить. Для этого следует использовать метод readJFrameData().
Примечание : метод readJFrameData восстанавливает размеры окна фрейма и возвращает результат типа Document (XML).
Классы подписки и публикации
Классы пакета com.bundle.basejframe.pubsub, представленные в скриншоте проекта, используются методами фреймворка для реализации механизма подписки и публикации.
ConnectSubscriber | Класс используется методом createConnectSubscriber для создания подписки на сообщения подключения к серверу БД и отключения от сервера БД. При поступлении данного типа сообщения будет вызван метод активатора базового фрейма changeConnect. |
LocaleSubscriber | Класс используется методом createLocaleSubscriber для создания подписки на сообщения изменения локализации интерфейса базового фрейма. В базовом фрейме локализуются заголовок, пункты меню и подсказки панели инструментов. При поступлении сообщения с новой Locale будет вызван метод активатора базового фрейма changeLocale. |
ContainerSubscriber | Класс используется методом createJFrameSubscriber для создания подписки на запрос контейнера фрейма. При поступлении от бандла сообщения данного типа вызывается метод активатора sendContainerEvent(), отправляющий контейнер бандлу. |
StartTimeSubscriber | Класс подписки на сообщение с запросом «времени старта» программы. При поступлении от бандла сообщения «jabricks/StartTime/Request» вызывается метод активатора sendContainerEvent(), отправляющий ответ «jabricks/StartTime/Response» с включением в него значения start_time. Подписчик StartTimeSubscriber стартует автоматически при старте бандла. |
EventPublisher | Класс отправки главным фреймом сообщений содержит 2 метода. Метод sendContainerEvent включает в отправляемое сообщение «jabricks/Container/Response» вместе с контейнером SymbolicName и Version бандла, запросившего контейнер. Метод sendStartTimeEvent отправляет сообщение «jabricks/StartTime/Response» вместе со временем старта программы. |
Взаимодействие ContainerSubscriber и EventPublisher
Представленные в таблице экземпляры классов используются для взаимодействия с интерфейсными бандлами. Экземпляр класс ContainerSubscriber участвует в подписке на сообщения, отправляемые бандлами с запросом контейнера фрейма, для размещения своего интерфейсного компонента (например, JPanel). Получив такое сообщение, ContainerSubscriber вызывает метод активатора sendContainerEvent. В данном методе активатор останавливает деактивируемый бандл, удаляет из контейнера фрейма его интерфейсный компонент, регистрирует параметры нового бандла для размещения в контейнере фрейма и отправляет ему сообщение sendContainerEvent (класс EventPublisher) с контейнером.
Пример создания главного фрейма
Как было отмечено выше, базовый модуль base-jframe.jar следует использовать для создания главного фрейма приложения JaBricks. Пример создания главного фрейма приложения JaBricks представлен здесь.
Зависимости
Базовый фрейм base-jframe функционирует вместе со следующими бандлами приложения Jabricks :
gui-widgets | используются глобальные константы приложения (интерфейс IWidgetsConstants) |
util-resources | используется для получения внешних ресурсов |
gui-menu | используется для формирования главного меню приложения |
gui-toolbar | используется для формирования панели инструментов |
Версии бандла
Версия 1.0.1 (base-jframe-1.0.1.jar)
Добавлена функция определения шрифта SWING-компонентов согласно значению, описанному в файле инициализации jabricks.ini. Пример описания шрифта в инициализационном файле :
Версия 1.0.2 (base-jframe-1.0.2.jar)
Добавлена функция динамической «загрузки» бандлов, имеющих опцию @dynamic при описании в файле «configuration/bundles.ini». Необходимо помнить, что все модули, связанные с динамически загружаемыми бандлами, должны быть заранее инсталлированы во фреймворк.
Чтобы использовать функцию динамической загрузки бандла необходимо использовать версию приложения jabricks-1.0.1.jar, либо jabricks.exe версии 1.0.1.3.
Скачать base-jframe
Рассмотренный на странице базовый модуль создания главного фрейма base-jframe упакован в архивный файл base-jframe-1.0.2.zip (31.1 Кб).
Подключение модуля к приложению
Для подключения модуля base-jframe в приложение Jabricks необходимо :
GAV параметры модуля base-jframe имеют следующие значения :
• groupId | : org.jabricks.jframe |
• artifactId | : base-jframe |
• version | : 1.0.2 |
Подробнее о включении модуля в приложение Jabricks представлено здесь.