Как написать программу на java с интерфейсом

JFace — это доплнительный слой абстракции над графической библиотекой SWT, предоставляющий возможности для разработки графического интерфейса приложения на основе модели MVC(Model View Controller). Основные компоненты JFace включают:

  • Viewers — классы для инкапсуляции задач предоставления данных для отображения, их фильтрации, сортировки и т.п.
  • Actions and contributions — вводят семантику описания пользовательских действий и того, как они должны быть доступны пользователю.
  • Image and font registries — предоставляют классы для управления ресурсами, такими как изображения и шрифты.
  • Dialogs and wizards — фреймворк для построения сложного диалогового взаимодействия с пользователем.
  • Field assist — предоставляет возможности для реализации вспомогательной функциональности для полей, такой как отображение статуса поля или подсказки о содержимом.

В первой части будет рассмотрено создание простого окна с использованием JFace, добавление к нему меню, статусной строки и панели инструментов.

Уроки Java для начинающих | #23 — GUI Java (Swing JFrame)

Настройка проекта

Для того, чтобы разрабатывать графические приложения с использованием JFace в Eclipse, необходимо подключить jar-файлы SWT и JFace.

  • В случае, если в Eclipse установлено PDE, то это можно сделать, указав в настройках проекта использовать библиотеку SWT, и поставить галочку для поддержки JFace.
  • Если же PDE не установлен, то необходимо подключить jar-файлы к проекту вручную. Найти их можно в директории plugins эклипса, называются они org.eclipse.swt_*.jar и org.eclipse.jface_*.jar

Создание окна

Окно приложения в JFace наследуется от класса ApplicationWindow, предоставляющего возможности для создания меню, панелей управления и строки статуса.

Простейший вариант создания окна приведен в следующем примере:

import org.eclipse.jface.window.ApplicationWindow; import org.eclipse.swt.widgets.Display; public class MainWindow extends ApplicationWindow < public static void main(String[] args) < MainWindow window = new MainWindow(); // Создаем наше окно window.setBlockOnOpen( true ); // Устанавливаем флаг — ждать закрытия окна window.open(); // Открываем окно Display.getCurrent().dispose(); // Освобождаем ресурсы >public MainWindow() < super( null ); // Вызываем конструктор родительского класса >>

Создание содержимого окна

Для того, чтобы создать какое-то содержимое окна, необходимо переопределить метод Control createContents( Composite parent ) класса ApplicationWindow. Метод должен возвращать компонент, который будет являться содержимым окна.

В этом же методе можно установить и заголовок окна, вызвав метод setText( String text ) шелла, доступного по вызову getShell()

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

protected Control createContents( Composite parent ) < getShell().setText(«My window»); // Устанавливаем заголовок окна Label lbl = new Label( parent, SWT.NONE ); // Создаем новый элемент, в нашем случае — просто метку lbl.setText( «Window contents» ); // Устанавливаем ей текст lbl.setBackground( new Color( Display.getCurrent(), 255, 255, 255 ) ); // Устанавливаем белый цвет фона return lbl; >

Добавление статусной строки

Добавление к окну приложения статусной строки реализуется не просто, а очень просто. Для этого надо всего-навсего вызвать защищенный метод addStatusBar(). Наверное, наиболее подходящим местом для такого вызова является конструктор окна, или какой-нибудь метод его инициализации.

Сделал Java программу с интерфейсом / Погодное приложение

Для того, чтобы отобразить текст в статусной строке необходимо вызвать метод setStatus( String status ), аргументом которого и является та самая строка, которую необходимо отобразить.

Создание меню

Для создания строки меню в JFace необходимо, вызвать метод addMenuBar(), как и для создания строки статуса.
Но затем необходимо добавить пункты меню на панель. Осуществляется это следующим образом:

  • Раздел меню описывается классом MenuManager. В конструкторе ему может быть передана строка — имя раздела, где символ » означает, что следующий за ним символ будет ключом при навигации с помошью клавиши Alt. Добавляется раздел меню на панель с помощью конструкции getMenuBar().add( menu ).
  • Пункт меню описывается классом Action. Сам класс является абстрактным, пункт меню должен быть унаследован от него и переопределять метод void run(), в котором размещается код, выполняемый при выборе пункта меню пользователем. На самом деле, метод можно и не переопределять, но тогда, зачем этот пункт меню нужен?=) Имя пункта может быть задано путем передачи в конструктор, или вызовом метода void setText( String text ). После создания пункт меню добавляется в раздел вызовом метода add у объекта раздела меню. Например: menu.add( menuItem )
  • Подменю создаются очень просто: Необходимо в один раздел меню методом add добавить другой раздел. Вот и все.
Читайте также:
К каким программам относятся драйверы

В следующем примере мы создаем раздел меню File и один пункт Hello в нем, выбор которого вызывает появление текста в статусной строке окна. Код создания меню я оформил в один метод, который вызывается из конструктора окна:

Создание панели инструментов

Для того, чтобы создать панель инструментов в окне необходимо в конструкторе окна вызвать метод addToolBar( int style ), в который передать стиль компонента панели.

Для доступа к созданной панели используется метод getToolBarManager(). Для добавления действия на панель используется метод add панели, куда передается действие.

В простейшем случае создание панели и добавление на нее кнопки будет выглядеть:

Создание нескольких перемещаемых панелей инструментов

Вместо одной панели инструментов можно создать набор перемещаемых панелей (CoolBar). Для этого необходимо:

  1. Вместо метода addToolBar вызвать метод addCoolBar
  2. Для доступа к набору панелей используется метод getCoolBarManager()
  3. Создать панель инструментов, на которую можно будет добавлять действия. Для этого необходимо создать новый экземпляр класса ToolBarManager, который будет представлять панель и вызвать метод add у CoolBarManager, передав туда панель.
  4. На созданную панель можно добавлять действия

Пример кода, создающего две плавающие панели:

private void createCoolbar()

Важно! Окно приложение может иметь или одну панель управления или набор перемещаемых, попытка создания и того и другого приведет к ошибке!

Возможные проблемы

Здесь будут описаны некоторые проблемы, с которыми можно столкнуться:

  • При добавлении пунктов меню после запуска приложения они не появляются — чтобы изменения меню после создания окна отобразились на нем, необходимо вызвать метод getMenuBarManager().update( true ) — указать обновить панель меню.

Ссылки

Дополнительная информация по JFace может быть найдена по следующим ссылкам:

  • Русскоязычная вводная статья на ibm.com
  • Цикл англоязычных статей на ibm.com
  • Описание API Eclipse — среди прочего там есть и пакеты, относящиеся к SWT и JFace

Источник: www.internet-technologies.ru

Введение в Java FX

Однажды у меня возникла идея, написать небольшое настольное приложение для своих нужд — что-то типа небольшого словаря для изучения иностранных слов — и я начал ломать голову, а как бы мне это сделать? Естественно, первое, что мне пришло в голову — Swing. Все наверняка слышали о Swing . Это библиотека для создания пользовательских, графических интерфейсов. В связи с тем, что наш горячо любимый Oracle еще не полностью отказался от Swing, он не считается устаревшим, и приложения на нем по-прежнему работают. Однако он больше не модернизируется Swing, и ребята из Oracle дали нам понять, что за JavaFX будущее. Да и по сути, JavaFX использует компоненты Swing как поставщика услуг)

Что такое JavaFX?

Введение в Java FX - 3

JavaFX — это по сути инструментарий GUI для Java. Здесь будет небольшое отступление, и мы вспомним, что такое GUI : Graphical user interface — графический интерфейс пользователя — это разновидность пользовательского интерфейса, в котором все элементы (кнопки, меню, пиктограммы, списки) представленные пользователю на дисплее, выполнены в виде картинок, графики.

В отличие от интерфейса командной строки, в GUI у пользователя есть произвольный доступ к видимым объектам с помощью устройств ввода. Зачастую элементы интерфейса реализованы в виде метафор и отображают их свойства и назначение для облегчение понимания пользователя. JavaFX нацелен на создание игр и настольных приложений на Java.

По сути им заменят Swing из-за предложенного нового инструмента GUI для Java. Также, он позволяет нам стилизовать файлы компоновки GUI (XML) и сделать их элегантнее с помощью CSS, подобно тому, как мы привыкли к сетевым приложениям. JavaFX дополнительно работает с интегрированной 3D-графикой, а также аудио, видео и встроенными сетевыми приложениями в единый инструментарий GUI… Он прост в освоении и хорошо оптимизирован. Он поддерживает множество операционных систем, а также Windows, UNIX системы и Mac OS.

Читайте также:
С какими программами работает 3d принтер

Особенности JavaFX:

JavaFX: примеры использования

Создаем обычный класс с методом main (точку входа):

Тут наш класс наследуется от javafx.application.Application (который у нас из коробки Бугага). В мейне вызываем статический метод Application — launch() для запуска нашего окна. Также у нас наша idea будет ругаться, на то что мы не реализовали метод Application — start , что мы в итоге и делаем. Для чего он нужен? А для того, чтобы можно было управлять свойствами (функционалом нашего окна). Для этого у нас юзается входящий аргумент primaryStage , у которого мы вызываем метод show , чтобы можно было увидеть запускаемое окно в main . Давайте немного заполним наш метод start :

public void start(Stage primaryStage) throws Exception < primaryStage.setTitle(«Dogs application»); primaryStage.setWidth(500); primaryStage.setHeight(400); InputStream iconStream = getClass().getResourceAsStream(«/images/someImage.png»); Image image = new Image(iconStream); primaryStage.getIcons().add(image); Button button = new Button(«WOF WOF . ‘»); button.setOnAction(e -< < Alert alert = new Alert(Alert.AlertType.INFORMATION, «WOF WOF WOF. «); alert.showAndWait(); >); Scene primaryScene = new Scene(button); primaryStage.setScene(primaryScene); primaryStage.show(); >

Итак, что мы тут видим?

Пробежимся построчно: 2 — задаем название самого окна(stage) 3,4 — задаем его размеры 6,7 — задаем путь читающего потока к файлу (иконке) Введение в Java FX - 58 — создаем файл как объект Image, который связан с реальным файлом потоком передаваемым в конструкторе 9 — задаем иконку в верхнюю панель окна 11 — создаем объект кнопки 13-16 — задаем реакцию при нажатии кнопки 17 — создаем сцену, куда помещаем нашу кнопку 18 — сцену помещаем на наше общее окно 20 — задаем флаг видимости для окна И как результат получаем небольшое окошко, для приветствия наших любимых песелей: Введение в Java FX - 6

Всё выглядит в разы проще, чем Swing, неправда ли? Но ещё не конец.

Полностью писать весь код для отображения приложения, не есть хорошо, нужно его как-то делить, дабы сделать его более понятным (графические составляющие в одни корзинки, логику в — другие). И тут на сцену выходит xml…. О боже мой, xml? Именно. А конкретно — используется его специфичная реализация для JavaFX — FXML, в которой мы определяем графические компоненты приложения и их свойства (там всякие размеры и прочее), а после — связываем с контроллером, который и помогает управлять логикой. Давайте рассмотрим пример такого xml:

function buttonClicked()

Введение в Java FX - 7

2 — язык сценариев который мы юзаем 4-6 — импортируемые данные 8-9 Vbox — контейнер, который размещает подкомпоненты в одной строке. 11 — выводим некий текст 13 — кнопка при нажатии которой мы юзаем метод описанный в скрипте на 15-18 строке Тут должен быть код вызова данного xml файла в методе start , но сейчас это не столь важно, и мы это опустим (ниже будет пример подтягивания данного файла). Итак, xml — это, конечно, хорошо (да не очень), вручную писать их очень заморочено, разве это не прошлый век?

Знакомство с JavaFX SceneBuilder

Введение в Java FX - 8

Именно на этом моменте на сцену выходит (барабанная дробь) — SceneBuilder В JavaFX Scene Builder — это инструмент, с помощью которого мы можем конструировать наши окна в виде графического интерфейса и после их сохранять, и эта программа на основании результата будет конструировать xml файлы, которые мы будем подтягивать в нашем приложении. Как-то так выглядит интерфейс данного fmxl-строителя:

Небольшое отступление. JavaFX уроки

Введение в Java FX - 9

Детали установки я упущу, и подробное изучение данного инструмента тоже. Это темы, которые стоит изучить дополнительно. Поэтому всё же оставлю пару интересных ссылочек на JavaFX уроки: раз (онлайн учебник по JavaFX) и два (еще один неплохой туториал). Давайте немного пробежимся по небольшому примеру, который я набросал.

В итоге у меня получилось, что-то вроде: (такое себе окошко для учёта собак) При выборе песеля и нажатии кнопки Delete, собака удаляется из нашего списка. При выборе четырехлапого друга и изменении его полей, а после нажатии кнопки Edit — инфа собачки обновляется. Когда нажимаем кнопку New, вылазит окошко для создания записи новой собаки (для начала её имени): После жмем Save и заполняем в первом окне остальные её поля, а затем жмём кнопку Edit для сохранения. Звучит несложно, верно? Давайте посмотрим, как это будем выглядеть у нас в приложении Java. Для начала, я просто оставлю здесь xml макеты для двух этих окон сгенерированных в SceneBuilder : Первое(базовое):

Читайте также:
Где в программе назначаются константы

Второе(для создания новых пёсиков):

public class AppFX extends Application < private Stage primaryStage; private AnchorPane rootLayout; private ObservableListlistDog = FXCollections.observableArrayList(); public AppFX()

Тут мы видим конструктор, который будет заполнять наши начальные данные (которые храним в специальном листе — ObservableList).

Ничего особенного — main и реализация start() , запускающая приложение:

public void showBaseWindow() < try < FXMLLoader loader = new FXMLLoader(); loader.setLocation(AppFX.class.getResource(«/maket/rootWindow.fxml»)); rootLayout = loader.load(); Scene scene = new Scene(rootLayout); primaryStage.setScene(scene); InputStream iconStream = getClass().getResourceAsStream(«/icons/someImage.png»); Image image = new Image(iconStream); primaryStage.getIcons().add(image); BaseController controller = loader.getController(); controller.setAppFX(this); primaryStage.show(); >catch (IOException e) < e.printStackTrace(); >>

Итак, тут мы видим метод, который мы собственно и запускаем в start() , а именно — задающий настройки нашего базового окна. Таких как на xml макете в ресурсах: задание ему иконки, связывание его с конкретным контроллером, и задание контроллеру ссылки на this класс)

public void showCreateWindow(Dog dog) < try < FXMLLoader loader = new FXMLLoader(); loader.setLocation(AppFX.class.getResource(«/maket/new.fxml»)); AnchorPane page = loader.load(); Stage dialogStage = new Stage(); dialogStage.setTitle(«Wow Wow Wow»); dialogStage.initModality(Modality.WINDOW_MODAL); dialogStage.initOwner(primaryStage); dialogStage.setScene(new Scene(page)); CreateController controller = loader.getController(); controller.setDialogStage(dialogStage); controller.setDog(dog); dialogStage.showAndWait(); >catch (IOException e) < e.printStackTrace(); >> >
public class Dog < private StringProperty name; private StringProperty breed; private IntegerProperty age; private StringProperty city; private IntegerProperty levelOfTraining; public Dog(String name, String breed, int age, String city, int levelOfTraining) < this.name = new SimpleStringProperty(name); this.breed = new SimpleStringProperty(breed); this.age = new SimpleIntegerProperty(age); this.city = new SimpleStringProperty(city); this.levelOfTraining = new SimpleIntegerProperty(levelOfTraining); >public Dog() < name = new SimpleStringProperty(); breed = null; age = null; city = null; levelOfTraining = null; >>
public void setAppFX(AppFX appFX) < this.appFX = appFX; dogs.setItems(appFX.getListDog()); >private void showDogsInformation(Dog dog) < if (dog != null) < name.setText(dog.getName() != null ? dog.getName().getValue() : null); breed.setText(dog.getBreed() != null ? dog.getBreed().getValue() : null); age.setText(dog.getAge() != null ? String.valueOf(dog.getAge().get()) : null); city.setText(dog.getCity() != null ? dog.getCity().getValue() : null); levelOfTraining.setText(dog.getLevelOfTraining() != null ? String.valueOf(dog.getLevelOfTraining().get()) : null); >else < name.setText(«»); breed.setText(«»); age.setText(«»); city.setText(«»); levelOfTraining.setText(«»); >>

В первом методе мы видим задание внутренней ссылки на класс, реализующий Application (для того, чтобы можно было дёрнуть его метод для вызова второго окна), и задание начального списка для отображения. Второй же проверяет, есть ли определенные данные текущей собаки, и на основании этого задаёт текстовые поля:

Тут мы видим связь с текстовым полем в окне, обработки кнопок Save и Cancel, которые так или иначе закрывают окно. Как вы видите, для большего удобства в своем небольшом приложении я юзал Lombok, иначе код очень бы сильно разросся бы, и в свой обзор я никак бы его не вместил.

На этом сегодня у меня, пожалуй, всё. Сегодня мы вкратце ознакомились с базовыми понятиями и примером использования JavaFX, и можем строить небольшие настольные приложения (используя дополнительную инфу, которой, благо, в интернетах полно). А с вас, в свою, очередь лайк))

Источник: javarush.com

Как написать программу на java с интерфейсом

Комментарии

Популярные По порядку
Не удалось загрузить комментарии.

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

ТОП-10 лучших книг по Java для программистов

Не имеет значения, хотите вы улучшить скилл или только собираетесь начать изучение, здесь вы найдете лучшие книги по Java для программистов.

6 книг по Java для программистов любого уровня

Подборка материалов по Java. Если вы изучаете его, то обязательно найдете для себя что-то полезное и неважно на какой стадии изучения вы находитесь.

Изучаем алгоритмы: полезные книги, веб-сайты, онлайн-курсы и видеоматериалы

В этой подборке представлен список книг, веб-сайтов и онлайн-курсов, дающих понимание как простых, так и продвинутых алгоритмов.

Источник: proglib.io

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru