Как сделать форму на java
Графический интерфейс пользователя (GUI) предоставляет программистам графический интерфейс, изначально он был разработан для программистов для создания общего графического интерфейса, чтобы он мог работать на всех платформах, но базовый класс AWT (Abstract Window Tool) в Java 1.0 (Box) не соответствовал этому требованию, поэтому появился Swing, это расширенный компонент, образованный AWT, но он не может полностью заменить AWT, эти два компонента должны появляться в графическом пользовательском интерфейсе одновременно.
Качели компонентов
Исходный компонент AWT происходит из пакета java.awt. Когда приложение Java, содержащее компонент AWT, выполняется на разных платформах, отображение компонента GUI каждой платформы будет отличаться, но приложение, разработанное Swing, будет работать на другой платформе. Таким образом, вы можете унифицировать стиль отображения компонентов GUI, потому что компоненты Swing позволяют программистам определять единый внешний вид на разных платформах.
Съемные компоненты кожи
Качели сумка
Чтобы эффективно использовать компоненты Swing, вы должны понимать иерархию и наследование пакетов Swing, наиболее важными из которых являются класс Component, класс Container и класс JComponent. Отношения наследования этих классов следующие:
javax.swing.JComponent наследуется от:
Класс javax.awt.Container наследуется от:
В компонентах Swing большинство компонентов GUI являются прямыми или косвенными подклассами класса Component. Класс JComponent является местом хранения различных функций компонента Swing. Характеристики этих компонентов включают установку границ компонентов и автоматическую прокрутку компонентов GUI.
Наиболее важным компонентом в компоненте Swing является родительский класс Container, а класс Container имеет два важных подкласса, а именно java.awt.Window и java.awt.Frame, за исключением того, что предыдущие компоненты класса AWT наследуют эти два класса. Кроме того, текущий компонент Swing расширяет эти два класса.
Общая форма
Формы как носители компонентов в приложениях Swing занимают очень важное положение. Обычно используемые формы в Swing включают JFrame и JDialog.
Форма JFrame
Форма JFrame является контейнером, она является носителем различных компонентов в программе Swing, JFrame можно рассматривать как контейнер, содержащий компоненты Swing для крови. При разработке приложения вы можете создать форму, унаследовав класс java.swing.JFrame. Добавьте компоненты к этой форме и установите события для компонентов.
Далее будет подробно объяснено использование форм JFrame в приложениях Java.
Синтаксис JFrame в программе выглядит следующим образом:
Значение параметров следующее:
jf: объект класса JFrame
container: объект класса Container можно получить, вызвав метод getContentPane () с использованием объекта JFrame.
Компоненты Swing-форм обычно связаны с компонентами и контейнерами, поэтому после создания объекта JFrame необходимо вызвать метод getContentPane (), чтобы преобразовать форму в контейнер, а затем добавить компоненты в контейнер или установить менеджер макета.
Обычно этот контейнер используется для хранения и отображения компонентов. Если вам нужно добавить компонент в контейнер, вы можете установить его, используя метод add из класса Container. Например:
После добавления компонентов в контейнер эти компоненты также можно удалить из контейнера с помощью метода Remove () класса Container, например:
В следующем примере реализуется объект JFrame для создания формы и добавления к ней компонента.
В приведенном выше примере класс Example1 наследует класс JFrame. В методе CreateJFrame () создается экземпляр объекта JFrame. Общие методы построения класса JFrame включают следующие две формы:
Два метода построения в классе JFrame - это метод построения без параметров и метод параметризации.
Первая форма построения может создать новую форму, которая изначально невидима и не имеет заголовка;
Вторая форма конструктора создает невидимую форму с заголовком, когда создается экземпляр объекта JFrame.
Вы можете использовать объект JFrame для вызова метода show (), чтобы сделать форму видимой, но этот метод был заменен методом setVisible (true) в версии JDK.
В то же время вы можете использовать метод setSize (int i, int j), чтобы установить размер формы, где переменные x и y представляют ширину и высоту формы соответственно.
После создания формы вам нужно предоставить форму для закрытия. Вы можете вызвать метод setDefaultCloseOPeration (), чтобы закрыть форму. Java предоставляет несколько способов закрыть форму, следующие четыре обычно используются;
DO_NOTHING_ON_CLOSE
DISPOSE_ON_CLOSE)
HIDE_ON_CLOSE
EXIT_ON_CLOSE
JDialog
Форма JDialog - это диалоговое окно в компоненте Swing, оно наследует класс java.awt.Dialog в компоненте AWT.
Функция формы JDialog состоит в том, чтобы вызывать другую форму из другой формы, подобно диалоговому окну OK, которое появляется при использовании Internet Explorer. Форма JDialog, по сути, является другим типом формы. Она похожа на форму JFrame. При ее использовании необходимо вызвать метод getCOntentPane () для преобразования формы в контейнер, а затем установить свойства формы в контейнере.
Чтобы создать форму JDialog в приложении, вам нужно создать экземпляр класса JDialog, как правило, используются следующие конструкторы класса JDialog.
- public JDialog (): создать диалог без заголовка и подчиненной формы
- public JDialog (Frame f): создает диалог, который указывает родительскую форму, но у диалога нет заголовка
- public JDialog (Frame f, логическая модель): создает диалог указанного типа и указывает родительскую форму, но форма не указывает заголовок.
- public JDialog (Frame f, String title): создать диалог с указанным заголовком и родительской формой
- public JDialog (Frame f, String title, логическая модель): создает диалоговое окно с указанным заголовком, родительской формой и режимом
Давайте посмотрим на пример:
В этом примере, чтобы сделать родительскую форму диалога всплывающей, определяется форма JFrame. Сначала в форме определяется кнопка, а затем к ней добавляется событие щелчка. В событии click мы использовали новый оператор MyJDialog (). SetVisible (true), чтобы сделать диалоговое окно видимым, реализовав таким образом функцию всплывающего диалогового окна после отдельной кнопки.
В классе MyDialog, поскольку он наследует класс JDialog, вы можете использовать ключевое слово super в конструкторе для вызова конструктора JDialog.
Здесь мы используем piublic JDialog (Frame f, заголовок String, логическая модель). Этот метод построения формы устанавливает пользовательскую форму JFrame и соответственно заголовок и тип формы диалогового окна.
Изучить основные принципы работы с формами, научиться использовать горизонтальные и всплывающие меню. Рассмотреть способы обработки событий от элементов меню. Научиться создавать и вызывать вспомогательные формы. Следует вспомнить материал главы /, посвященный обработке событий от мыши и клавиатуры, а также разработке визуального интерфейса (см. главы 1, 2). Дополнительные сведения следует искать в [2, 11, 13, 15, 17].
Краткие теоретические сведения
Рассмотрим сначала, как создавать горизонтальное меню. Панель меню объявляется в приложении с помощью класса MenuBar. Элементы горизонтального меню объявляются как объекты класса Menu и добавляются на панель MenuBar. Пункты меню являются членами класса Menuitem и добавляются в соответствующие элементы меню Menu. Обработка событий, связанных с выбором пунктов меню, выполняется на основе прослушивателя ActionListener так же, как и от кнопок. Для этих же целей можно задействовать метод action ().
Прежде всего, создадим меню в конструкторе класса так, как показано далее:
import java.awt.*; import java.util.*;
public class Forma extends Frame
MenuBar mb = new MenuBar();
Menu ml=new Menu("Operations");
Menu m2=new Menu("TheEnd");
ml.add(new MenuItem("Show")); m2.add(new MenuItem("Quit")); mb.add(ml); mb.add(m2); setMenuBar(mb);
Как видно, меню определяется через компоненты MenuBar, Menu, Menuitem. Последние генерируют событие при их выборе и допускают обработку. Обработчик событий от пунктов меню с именами Quit и Show:
public boolean action (Event evt, Object ob)
String lbl=(String) ob; if (lbl.equals("Quit"))
System.exit(0) ; return true;
Framemenu fr= new Framemenu(); fr.resize(300, 300); fr.show(); return true;
Метод public boolean action(Event evt, Object ob) является универсальным (позволяет обрабатывать события и от программных кнопок, и от других компонентов). Его следует запомнить. Аргументами этого метода являются имя события и объект, сгенерировавший событие. В тексте метода проверяется, от какого объекта возникло событие.
Следующие строки кода показывают, как конструируются (создаются) объекты в Java:
Framemenu fr= new Framemenu(); fr.resize(300,300); fr.show();
Framemenu — это имя класса, который имеет такое описание:
class Framemenu extends Frame
Button ex=new Button("Return");
setLayout(null); ex.setBounds(20,40,100, 20) ; setBackground(new Color(100,60,120));
В классе Framemenu определены два метода.
public void paint(Graphics g)
g.drawString("Hello, Dears!", 120,100);
public boolean action (Event evt, Object ob)
String lb=(String) ob; if (lb.equals("Return")) dispose(); return true;
Метод paint () используется для вывода текстовой строки, метод action() — обработчик событий; в данном случае при нажатии на кнопку Return вызывается метод dispose (), который удаляет вспомогательную форму.
Таким образом, на главной форме создано меню, которое позволяет запускать вспомогательную форму. Полный текст приложения (листинг 2.9) приведен далее.
Листинг 2.9. Текст приложения для работы с горизонтальным меню
import java.awt.*; import java.util.*; import java.lang.*;
public class Forma extends Frame
MenuBar mb = new MenuBar();
Menu ml=new Menu("Operations");
Menu m2=new Menu("TheEnd");
// Пункт мешо для демонстрации вспомогательной формы: ml.add(new MenuItem("Show"));
// Пункт мешо для завершения приложения: m2.add(new MenuItem("Quit")); mb.add(ml); mb.add(m2); setMenuBar(mb) ;
public boolean action (Event evt, Object ob)
String lbl=(String) ob; if (lbl.equals("Quit"))
System.exit(0) ; return true;
Framemenu fr= new Framemenu(); // Создаем
fr.show(); // Делаем вспомогательную форму видимой return true;
public static void main(String args[])
Forma f=new Forma(); f. resize (400, 400) ;
class Framemenu extends Frame // Класс вспомогательной формы
Button ex=new Button("Return");
setLayout(null) ; ex.setBounds(20,40,100,20); setBackground(new Color(100,60,120));
public void paint(Graphics g)
g. drawString("Hello, Dears!", 120,100);
public boolean action (Event evt, Object ob)
String lb=(String) ob; if (lb.equals("Return")) dispose(); return true;
Теперь обратимся к всплывающему меню, которое относится к классу PopupMenu и использует пункты меню Menuitems. Для работы с всплывающим меню следует подключить два интерфейса:
ActionListener И MouseListener. Интерфейс MouseListener используется для его отображения, которое выполняется на основе метода pressMouseEvent () следующим образом:
public void pressMouseEvent(MouseEvent ev)
menu.show(ev.getComponent(), ev.getX(), ev.getY()); super.processMouseEvent(ev);
В этом фрагменте menu — программное имя всплывающего меню (переменной класса PopupMenu). Метод getcomponent() класса MouseEvent возвращает объект, создавший событие ev; метод getx () возвращает координату по оси X курсора мыши в момент генерации события, а метод getY () — координату по оси Y. Последняя команда приведенного фрагмента выполняет вызов метода processMouseEvent () суперкласса.
Обработка событий, связанных с выбором пунктов всплывающего меню, реализуется традиционным образом через интерфейс ActionListener. Всплывающее меню добавлено на форму в тексте конструктора.
add(exit); // Добавлена кнопка для выхода из приложения addMouseListener(this); // Добавлен прослушиватель
itl.addActionListener(this); // Добавление прослушивателя
// для пунктов всплывающего меню
enableEvents(AWT.MOUSE_EVENT_MASK); // Активизация событий от
exit.addActionListener(this); // Добавление прослушивателя
exit.setBounds(10,20,100,20); // Установка размеров и
Приведем код программы, в которой показан пример создания всплывающего меню (листинг 2.10).
Листинг 2.10. Текст приложения для работы со всплывающим меню
import java.awt.*; import java.util.*; import java.lang.*; import java.awt.event.*;
public class Forma extends Frame implements ActionListener, MouseListener
Button exit=new Button("Exit");
PopupMenu menu= new PopupMenu("pop"); // Создается
// всплывающее меню MenuItem itl= new MenuItem("Show"); // Используется для
// вспомогательной формы MenuItem it2= new MenuItem("Quit"); // Используется для
// выхода из приложения
addMouseListener(this); // Добавление прослушивателя для
menu.add(itl); // Добавление пунктов во всплывающее меню menu.add(it2); // Добавление пунктов во всплывающее меню
itl.addActionListener(this); // Добавление прослушивателя
// для пунктов всплывающего / / мешо
// событий от мыши
public void mouseEntered(MouseEvent ev) // Приведенные методы
// интерфейса // MouseListener // не реализованы
public void mouseExited(MouseEvent ev)
public void mousePressed(MouseEvent ev)
public void mouseReleased(MouseEvent ev) // Всплывающее меню
// нужно создавать // в этом методе
menu.show(ev.getComponent(), ev.getX(), ev.getY());
// Отобразить // всплывающее меню
public void mouseClicked(MouseEvent ev)
public void actionPerformed(ActionEvent e)
if (e.getSource()=itl) // Выбран пункт itl всплывающего
Framemenu fr= new Framemenu(); // Создаем
fr.show(); // Делаем вспомогательную форму видимой
public static void main(String args[])
Forma f=new Forma(); f. resize (400, 400) ;
class Framemenu extends Frame // Класс вспомогательной формы
Button ex=new Button("Return");
public void paint(Graphics g)
g. drawString("Hello, Dears!", 120,100);
public boolean action (Event evt, Object ob)
String lb=(String) ob; if (lb.equals("Return")) dispose(); // Закрываем и удаляем вспомогательную форму return true;
Обратим внимание на следующее:
? всплывающее меню относится к классу PopupMenu
? его пункты обрабатываются с помощью метода
? само меню нужно показать командой:
menu.show(ev.getComponent(), ev.getX(), ev.getY())
? эту команду следует поместить в обработчик
(Дальше много картинок!)
Потратив несколько дней на изучение данного вопроса, я выяснил несколько забавных нюансов.
Первый — GUI для Java есть трёх видов (библиотек): AWT, Swing (кто придумывает такие названия?) и JavaFX.
На сегодняшний день (Java 8 и 9) все они входят в комплект поставки JDK: то есть всё работает из коробки и не нужно заморачиватся с их установкой. Это большой плюс.
Но, AWT — это первая и очень старая реализация, поэтому её использовать не нужно. В общем — некошерно. Swing — тоже некошерно, поскольку там что-то не так замутили и программы из-за него жутко тормозят. Точнее не скажу, не разбирался, но вроде как она официально больше не развивается несколько версий. А вот JavaFX — это гуд и наше светлое будущее.
Так что единственное на что стоит потратить время — это JavaFX.
- запускаем Delphi;
- автоматом создается новый проект с главной формой;
- выбираем на палитре компонентов кнопку и размещаем на форме; всё визуально
- аналогично кидаем на форму текстовое поле;
- при необходимости в панели свойств можно указать текст кнопки, размеры и т.п.;
- запускаем — Delphi предложит сохраниться, сохраняемся.
То есть мы не написали ни единой строчки кода, IDE — всё сделала сама. Если посмотреть на сгенерированный код, то назвать его простым нельзя — здесь уже требуются определенные знания, но Delphi достаточно умна, чтобы понимать как с ним работать.
- два раза кликаем на кнопку (или выбираем событие onClick);
- Delphi создает код обработчика этого события и перекидывает нас в редактор;
- набираем название текстового поля и Delphi выдает подсказки, по которым можно соориентироваться что и как делать.
То есть опять же, IDE выполнила всю черновую работу.
При этом предполагается, что каждый элемент и каждое его свойство нужно программировать индивидуально. Вот пример на две кнопки и одну label из моей обучающей книги
Для меня совершенно удивительно то, что обучение Java не начинается именно с таких приложений. Пусть это не Delphi, но всё-равно это в миллион миллионов раз лучше, чем работать с консолью и забивать себе голову прочим хламом о том, почему нужно использовать стопицот строк с ООП там, где в других языках на это уходит одна простенькая процедура. ;-)
Ява должна быть установлена на компе. Я не буду приводить ссылки как это сделать — гугл в помощь, поскольку всё слишком просто.
В Яве нет какой-то одной программы — среды разработки, поэтому в Сети встречаются примеры из разных программ. Самые примитивные, вроде Notepad++ годятся только для консольного вывода, но если рассматривать что-то более серьёзное, то выделяются только три кандидата: NetBeans, Eclipse и IntelliJ IDEA.
NetBeans — самая простая программа, которая быстро (относительно остальных) запускается и довольно сносно работает.
Eclipse — тоже неплохой вариант, более мощный чем NetBeans, но слабее чем IntelliJ IDEA.
IntelliJ IDEA — выглядит самой крутой, но за это приходится платить скоростью работы. Стоит отметить, что Android Studio базируется на IntelliJ IDEA, но студия работает почему-то значительно медленней.
Важный момент связан с программированием под Андроид. Из этих трех IDE только IntelliJ IDEA для этого более-менее годится. В Сети масса материалов о программировании под Андроид в Eclipse, но они все уже устаревшие — не тратье время, запуская старенький ADT-плагин и пытаясь хоть что-то с ним сделать. Может быть старый Android SDK и будет работать, но все новые — уже нет.
Я покажу как сделать приложение FXML JavaFX во всех трёх программах, но прежде чем приступать, нужно установить ещё одну программу: SceneBuilder (используйте версию для Java 8). Это ключевая программа, где, собственно и выполняется всё визуальное построение. SceneBuilder самостоятельно может работать без IDE, поэтому можете её запустить и посмотреть как она устроена. На выходе будет fxml-файл, который содержит всю нужную разметку. Этот файл и используется в IDE, вместо написания мегатонны кода. :-)
В каждой программе вам нужно заранее прописать настройку — используемую JDK. Если не можете понять как это сделать, гуглите.
NetBeans
Перед началом работы, нужно подключить SceneBuilder: Сервис - Параметры - Java - JavaFX - Начальная страница Scene Builder. Выберите каталог программы. Настройку достаточно сделать один раз. Это относится ко всем IDE.
Теперь запустите программу. Вначале пойдет сборка и компиляция (довольно быстрая), после чего выскочит окно нашей программы.
Это круто, потому что мы не написали ни строчки кода, но уже получили программу с работающей кнопкой. :-)
Принцип работы в SceneBuilder един для всех IDE, поэтому пока я опишу только общие моменты, дальше вы уже сами сообразите.
Стоит отметить, что после редактирования файла, закрывать SceneBuilder не нужно. Достаточно только сохраниться (Ctrl+S) и переключиться на IDE — она сама подхватит изменения.
Окно SceneBuilder разделено на три части:
- слева — наборы компонентов, иерархия и Controller, где указывается основной класс (это важно!)
- в центре — сама форма, где и происходит визуальное построение.
- справа — свойства компонентов, разделенные на три закладки (это условное деление). Вкладка Code отвечает за то, что будет использоваться в java-файле.
Иерархия компонентов очень удобная штука, позволяющая быстро выбрать нужный элемент.
По условиям ТЗ у нас должно быть текстовое поле. NetBeans использует Label, но мы не будем ничего удалять, а просто добавим новый элемент TextField на форму (произвольно на ваш вкус).
Теперь важный момент: для того чтобы можно было использовать компонент в java-программе (в нашем коде), следует выполнить две вещи.
Первая — проверить, что указан верный контролёр. В нашем случае NetBeans сам уже всё сделал и указал myfx.FXMLDocumentController .
Как видно — это контролёр из файла FXMLDocumentController.java (пакет.контролёр). Не всегда IDE его указывают, но это важно, поскольку fxml-файл (точнее java-код) использует его для привязки.
Второй момент — используемый компонент должен иметь свой ID — это параметр fx:id . Здесь я указал textField1.
У кнопки, которая будет заполнять текстовое поле, тоже должен быть свой id, а также метод события onAction (это основное событие компонента, а не onClick, как в Delphi). NetBeans уже об этом позаботился, поэтому нам ничего не придется писать.
На этом визуальное построение можно завершить. Сохраняемся и переключаемся в NetBeans. Видим, что файл FXMLDocument.fxml изменился: добавился textField1:
После выполнения этой команды, произойдет переход к файлу FXMLDocumentController.java, где в код будет добавлено объявление переменной textField1:
Запускаем программу на выполнение для теста. Теперь наша задача по клику на кнопке заполнить текстовое поле. Как вы уже поняли метод handleButtonAction как раз и выполняет нужную работу. В нём дописываем:
Обратите внимание как работает автодополнение кода после того, как будет нажата точка.
По мере набора текста, NetBeans будет сужать область предложений, где можно выбрать нужный вариант. Эта возможность очень здорово облегчает жизнь программистам, поскольку вариантов слишком много и это позволяет избежать различного рода синтаксических ошибок при наборе.
Запускаем программу и видим, что всё работает как нужно.
Нам пришлось написать всего одну строчку кода, ну и выполнить несколько дополнительных действий в редакторе.
Eclipse
Запуск Eclipse происходит несколько дольше, чем NetBeans. Вначале нужно указать путь к SceneBuilder. Делается это в Window - Preferences - JavaFX.
Обратите также внимание на то, что Eclipse неруссифицированная программа (даже не знаю, есть ли к ней руссификатор).
Создаём новый проект и выбираем JavaFX.
Жмем Next и попадаем на страницу настроек. Здесь я указал название проекта, как и прежде myfx (у меня для разных IDE разные каталоги проектов, поэтому они не пересекаются друг с другом).
Дальше ещё несколько раз жмем на Next, пока не попадем на последние настройки.
Здесь нужно выбрать тип приложения, тип контейнера и имя контролера. Жмем Finish и Eclipse быстро генерирует каркас нашей будущей программы.
Здесь всё очень похоже, только добавлен еще один файл application.css — да, да, в JavaFX можно использовать CSS для настройки оформления! Eclipse сразу сгенерировал для этого файла код подключения.
Запустим программу и убедимся, что нет ошибок.
В отличие от NetBeans, здесь совершенно пустая форма. Откроем её в SceneBuilder с помощью контекстного меню.
Контейнер BorderPane состоит из 4-х частей: top, right, bottom, left и center. Компоненты следует помещать в разные части — от этого будет зависеть их положение при изменении размера окна.
Здесь довольно сложно объяснить словами, просто попробуйте разместить несколько кнопок, а после в предварительном просмотре измените размеры окна.
Я не стал особо мудрить и разместил вверху текстовое поле, а в центре кнопку.
Теперь проверим, что указан контролёр: в данном случае application.SampleController — Eclipse выполнил эту работу за нас.
Для кнопки укажем метод на событие — btn1Click.
Сохранимся и вернёмся в Eclipse. Мы увидим, что файл Sample.fxml обновился, но рядом с некоторыми строками появились значки предупреждения.
При этом выскакивает подсказка о предполагаемом действии. Например для textField1 предлагается добавить идентификатор в контролёр:
а для кнопки ещё и метод-обработчик события:
При этом, Eclipse немного притормаживает и изменения не сразу отображаются на экране. Тут нужно либо переключиться на файл контролёра, либо немного подождать. В результате в код будет добавлены нужные изменения и значки предупреждений исчезнут.
Добавим наш код как и раньше мы сделали в NetBeans.
Обратите внимание на более интелектуальную работу автодополнения. В автоматическом режиме он немного подтормаживает, но если нажать Ctrl+Пробел (эта же комбинация используется во многих IDE), то позволяет получить и неплохой хелп.
Запускаем нашу программу.
И записываем себе на счёт ещё одну IDE. :-)
IntelliJ IDEA
IntelliJ IDEA запускается довольно неспешно, можно успеть проверить почту. :-)
Опять же указываем путь к SceneBuilder: File - Settings:
Дальше создаем новый проект:
И указываем его имя (как обычно — myfx):
IntelliJ IDEA выполнит инициализацию и мы увидим уже знакомые три файла. Запустим программу, чтобы проверить отсутствие ошибок.
Здесь также пустая форма, но зато указан заголовок программы. Если посмотреть на код Main.java, то увидим строчку:
Переключаемся в SceneBuilder (аналогично Eclipse): второй кнопкой мыши нужно выбрать Open in SceneBuilder.
Здесь также пустая форма, но с контейнером GridPane. Устанавливаем Pref Width и Pref Height, чтобы отобразилась форма.
Сам по себе GridPane представляет собой аля-сетку из ячеек для элементов. Думаю, что тут нет смысла повторяться — все действия будут аналогичными:
- разместить кнопку и тестовое поле,
- присвоить им id,
- для кнопки прописать метод для обработки клика,
- не забываем проверить, указан ли контролёр (sample.Controller).
Закрываем SceneBuilder и возвращаемся в IntelliJ IDEA. Здесь нужно добавить идентификаторы id в код, а также создать метод для реакции на нажатие кнопки.
Второй — горячая клавиша Alt+Enter
При каждом добавлении происходит переключение на файл контролёра, где можно сразу увидеть изменения.
Вообще IntelliJ IDEA показывает достаточно хорошую сообразительность и выступает помощником в написании кода. Причём делает это самостоятельно без лишних нажатий кнопок.
Ну что ж, добавляем свой код для обработчика и запускаем программу:
Прекрасно, всё работает!
Итого
Главный вывод — на Яве возможно визуальное программирование. Может оно и не идеальное, но вполне годное, особенно для новичков. Изучать язык гораздо интереснее, когда есть какой-то осязаемый результат — ООП, классы и прочие премудрости — это хорошо, но лучше начать с кнопочек, полей ввода, меню и всего того, что подразумевает нормальная программа. А консоль — это скучно и неинтересно.
Три IDE я привел не случайно. В Сети очень много примеров для Явы и все они для разных программ. Лично я ещё не определился со своим предпочтением, поскольку у всех есть как плюсы, так и минусы. Наверное нужно поработать со всеми, тогда и будет понятно.
Но, ключевой момент — это умение работать с SceneBuilder. Построение формы в JavaFX немного отличается от той же Delphi, в первую очередь в использовании сложных контейнеров (они могут быть вложенными друг в друга). Поэтому вначале следует разобраться с ними, после уже можно браться за сами компоненты.
Рассмотренные программы очень простые, для изучения наверное стоит написать что-то более интересное, например калькулятор. То есть те проекты, которые не требуют особых знаний и рассчитанные на быстрый результат. Впрочем, это уже на любителя. :-)
Сейчас мы поговорим о различных приемах работы сценариев JavaScript с HTML-формами.
Если в HTML-документе определена форма, то она доступна сценарию JavaScript как объект, входящий в объект document с именем, заданным атрибутом NAME тега FORM .
Свойства форм
Форма имеет два набора свойств, состав одного из которых фиксированный, а состав другого зависит от того, какие элементы определены в форме.
Свойства первого набора
- action. Значение атрибута ACTION тега FORM .
- encoding. Значение атрибута ENCTYPE тега FORM .
- method. Значение атрибута METHOD тега FORM .
- target. Значение атрибута TARGET тега FORM .
- elements. Массив всех элементов формы.
- length. Размер массива elements.
Большинство свойств первого набора просто отражает значение соответствующих атрибутов тега FORM . Что же касается массива elements , то в нем находятся объекты, соответствующие элементам, определенным в форме. Эти объекты образуют второй набор свойств формы. Адресоваться к этим объектам можно как к элементам массива elements , причем первому элементу формы будет соответствовать элемент с индексом 0, второму - с индексом 1 и т.д. Однако удобнее обращаться к элементам формы по их именам, заданным атрибутом NAME .
Элементы форм
Кнопки (BUTTON, RESET, SUBMIT)
Свойства
- name. Имя объекта.
- value. Надпись на кнопке.
Метод
- click( ). Вызов этого метода тождественен щелчку мышкой по кнопке.
Пример
Нажатие кнопки
Флажок (CHECKBOX)
Свойства
- name. Имя объекта.
- value. Надпись на кнопке.
- checked. Состояние флажка: true - флажок установлен, false - флажок не установлен.
- defaultChecked. Отражает наличие атрибута CHECKED : true - есть, false - нет.
Метод
- click( ). Вызов этого метода меняет состояние флажка.
Пример
Метод click флажка
Переключатель (RADIO)
Свойства
- name. Имя объекта.
- value. Надпись на кнопке.
- length. Количество переключателей в группе.
- checked. Состояние переключателя: true - переключатель включен, false - выключен.
- defaultChecked. Отражает наличие атрибута CHECKED : true - есть, false - нет.
Метод
- click( ). Вызов этого метода включает переключатель.
Так как группа переключателей имеет одно имя NAME , то к переключателям надо адресоваться как к элементам массива.
Пример
Метод click группы переключателей
Список (SELECT)
Свойства
- name. Имя объекта.
- selectedIndex. Номер выбранного элемента или первого среди выбранных (если указан атрибут MULTIPLE ).
- length. Количество элементов (строк) в списке.
- options. Массив элементов списка, заданных тегами OPTION .
- value. Значение атрибута VALUE .
- text. Текст, указанный после тега OPTION .
- index. Индекс элемента списка.
- selected. Присвоив этому свойству значение true , можно выбрать данный элемент.
- defaultSelected. Отражает наличие атрибута SELECTED : true - есть, false - нет.
Методы
- focus( ). Передает списку фокус ввода.
- blur( ). Отбирает у списка фокус ввода.
Пример
Работа с готовым списком
Кроме работы с готовыми списками JavaScript может заполнять список динамически. Для записи нового элемента списка используется конструктор Option c четырьмя параметрами, первый из которых задает текст, отображаемый в списке, второй - значение элемента списка, соответствующее значению атрибута VALUE , третий соответствует свойству defaultSelected , четвертый - свойству selected .
Пример
Динамическое заполнение списка
Поле ввода (TEXT)
Свойства
- name. Имя объекта.
- defaultValue. Начальное содержимое поля.
- value. Текущее содержимое поля.
Методы
- focus( ). Передает полю фокус ввода.
- blur( ). Отбирает у поля фокус ввода.
- select( ). Выделяет содержимое поля.
Пример
Заполните анкету
Обратите внимание на то, что символы фамилии и имени при потере фокуса соответствующими полями преобразуются в прописные. Для этого используется метод toUpperCase , определенный во встроенном классе строк.
Текстовая область (TEXTAREA)
Свойства
- name. Имя объекта.
- defaultValue. Начальное содержимое области.
- value. Текущее содержимое области.
Методы
- focus( ). Передает области фокус ввода.
- blur( ). Отбирает у области фокус ввода.
- select( ). Выделяет содержимое области.
Пример
Отправьте телеграмму
Для установки курсора в определенное место textarea-области используйте следующую кросбраузерную функцию:
Читайте также: