JavaFX: новое мЫшленье в вопросах обработки событий
Осваиваю JavaFX, которая, между прочим, весьма динамично развивается (даже не заметил, как вышла версия 2.1). По сравнению со Swing и AWT изменено очень многое. Что-то в сторону упрощения и удобства, но кое-что очень непривычно и поначалу вызывает раздражение. Однако стоит понять общую идею, как приходишь к мысли: «А ведь иначе и быть не должно!» Например, важно понять что такое связывание (binding). В прежних версиях GUI от Java принято было, как и в других средах создания визуальных компонентов, идти именно от видимого: щелкнул курсором по текстовому полю — сработало событие FocusGained или FocusLost, которое очевиднейшим образом обрабатываешь, т.е. меняешь состояние полей, вызываешь методы. Разработчики JavaFX рекомендуют идти от обратного: изменилось состояние некого абстрактного объекта (строки, числа, и т.п.) — происходят изменения в пользовательском интерфейсе. Так что FocusListener или FocusHandler, например, искать в JavaFX бесполезно. Вместо этого делается так:
Т.е. некое свойство GUI-элемента — focusedProperty — изменяется и это влечет за собой события. Как производятся сами изменения — это уж забота системы. Программист же должен сосредоточиться на реакции.
Потихоньку вхожу во вкус такого программирования, которое, хотя и непривычно, но и впрямь очень способствует сосредоточению на бизнес-логике, а не рисовании красивых интерфейсов. Впрочем, интерфейсы и без того получаются довольно симпатичные.
package ru.yababay;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextField;
/**
*
* @author yababay
*/
public class Sample implements Initializable {
@FXML
private TextField label;
@Override
public void initialize(URL url, ResourceBundle rb) {
label.focusedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
if(!newValue.booleanValue())
System.out.println(label.getText());
}
} );
}
}
Т.е. некое свойство GUI-элемента — focusedProperty — изменяется и это влечет за собой события. Как производятся сами изменения — это уж забота системы. Программист же должен сосредоточиться на реакции.
Потихоньку вхожу во вкус такого программирования, которое, хотя и непривычно, но и впрямь очень способствует сосредоточению на бизнес-логике, а не рисовании красивых интерфейсов. Впрочем, интерфейсы и без того получаются довольно симпатичные.
- —
- 18 апреля 2012, 22:58
- комментировать
Изящнее, изящнее, господа программисты
В поисках решений при написании программ на языке Java попадаются иногда удивительные перлы.
Нет, в целом код работающий и вполне подходящий, за что хочется сказать зарубежным коллегам искреннее спасибо. Однако давайте попробуем слегка оптимизировать вот этот конкретный метод.
( Читать дальше )
public void createDataBase() throws IOException{
boolean dbExist = checkDataBase();
if(dbExist){
//do nothing - database already exist
}else{
// Многа букаф кода...
}
}
Нет, в целом код работающий и вполне подходящий, за что хочется сказать зарубежным коллегам искреннее спасибо. Однако давайте попробуем слегка оптимизировать вот этот конкретный метод.
( Читать дальше )
- +12
- 10 января 2011, 00:05
- 2
День рождения языка Perl
23 года назад, 1987-12-18, состоялся релиз первой версии языка программирования Perl.
perl -e 'print "Congratulations!\n"'
- +4
- 18 декабря 2010, 11:50
- 8
Java-приложение как Windows-сервис
По просьбе камрада Gangsta раскрываю подробности работы NSIS-скрипта, описанного в прошлом топике. В нем было перечислено несколько файлов, входящих в тестовый дистрибутив (install.bat, wrapper.properties) и т.п. Что в них находится и зачем они нужны? С точки зрения изучения возможностей установщика NSIS эта информация избыточна: файлы и файлы, которые могли называться как угодно и содержать что угодно. Главное было — положить их в нужную папку на целевой машине. В отладочных целях в том скрипте не был предусмотрен даже автозапуск самопального install.bat (хотя возможности для этого в NSIS есть).
Однако рассмотренный пример интересен еще и тем, что устанавливает на Windows-компьютер Java-приложение в качестве сервиса, а это весьма ценно. Ведь сервис запускается скрытым для обычного пользователя образом (т.е. на экране не маячит дурацкое черное окно), может выполнять привилегированные операции, его можно перезапускать и останавливать. Как всё это реализовать, если речь идет о Java-приложении (в данном случае — Apache Felix)?
( Читать дальше )
Однако рассмотренный пример интересен еще и тем, что устанавливает на Windows-компьютер Java-приложение в качестве сервиса, а это весьма ценно. Ведь сервис запускается скрытым для обычного пользователя образом (т.е. на экране не маячит дурацкое черное окно), может выполнять привилегированные операции, его можно перезапускать и останавливать. Как всё это реализовать, если речь идет о Java-приложении (в данном случае — Apache Felix)?
( Читать дальше )
- +6
- 25 ноября 2010, 15:21
- 3
NSIS: пример скрипта
NSIS — установщик ПО для Windows — способен выполнять довольно сложные настройки системы в процессе инсталляции. Однако осваивать его лучше на простых примерах. Вот работающий скрипт, устанавливающий среду OSGi (Apache Felix) на Windows-машину в виде сервиса:
( Читать дальше )
( Читать дальше )
- +2
- 25 ноября 2010, 00:59
- 1
Регулярные выражения в JavaScript: флаг g (global)
Осваивая регулярные выражения, нельзя забывать про модификаторы, устанавливаемые после них. Таковых три: i — искать независимо от регистра букв (foobar, FooBar и FOOBAR воспринимаются одинаково). m — многострочный режим, который применяется сравнительно редко (см., напр., здесь). А вот на модификаторе g (global) стоит остановиться подробнее, т.к. иногда про него забывают и удивляются неработающему выражению.
( Читать дальше )
( Читать дальше )
- +10
- 19 ноября 2010, 23:56
- 3
NSIS: установщик ПО для Windows можно собрать и под Linux
NSIS (Null Soft Installer) — легендарный установщик программного обеспечения под Windows от создателя не менее легендарного проигрывателя WinAmp. С дистрибутивами, созданными с помощью NSIS, встречался, без сомнения, каждый пользователь Windows. Пользоваться этим продуктом не стесняются крупные корпорации, благо он распространяется по свободной лицензии. Если при работе какого-нибудь setup.exe вы видите бегущие на черном фоне зеленые строчки, то скорее всего вы имеете дело с NSIS.
Создать дистрибутив с помощью этого SDK довольно просто. Нужно лишь изучить нехитрый синтаксис, составить скрипт и откомпилировать его с помощью консольной утилиты makensis.exe. Подробности легко найти в сети. Однако есть небольшая проблема: если нужно создать кроссплатформенное ПО, то придется вылезать под Windows. Хотя почему придется? NSIS прекрасно работает и под Linux!
( Читать дальше )
Создать дистрибутив с помощью этого SDK довольно просто. Нужно лишь изучить нехитрый синтаксис, составить скрипт и откомпилировать его с помощью консольной утилиты makensis.exe. Подробности легко найти в сети. Однако есть небольшая проблема: если нужно создать кроссплатформенное ПО, то придется вылезать под Windows. Хотя почему придется? NSIS прекрасно работает и под Linux!
( Читать дальше )
- +10
- 19 ноября 2010, 02:53
- 2
OpenJDK: Навались, братва!
OpenJDK — проект по созданию инструментария для Java-разработчиков, состоящего только из свободного и открытого ПО. Дело в том, что лицензия на фирменный JDK от Sun/Oracle очень далека от тех параметров свободы, которые гарантирует GPL. Зато работает быстро и стабильно. OpenJDK ни скоростью, ни стабильностью похвастаться не может, зато полностью свободна от патентных ограничений. Куда же бедному крестьянину податься?
( Читать дальше )
( Читать дальше )
- +12
- 16 ноября 2010, 01:30
- 2
1C 7.7 + Etersoft Wine + PostgreSQL
Довольно часто требуется обеспечить интеграцию программы 1С с другими базами данных. Под Windows это легко запрограммировать с помощью ADO. А как быть, если 1C работает в среде Linux под Wine? ADO с Wine не очень-то стыкуется, к тому же теряется лицензионная чистота. Остается использовать UNIX-way. Например, задействовать демон incron, реагирующий на изменения файлов.
( Читать дальше )
( Читать дальше )
- +8
- 01 ноября 2010, 19:48
- 2