Стереотипы

  • 03 сентября 2012, 09:47
  • dos65
  • 1

JavaFX: новое мЫшленье в вопросах обработки событий

Осваиваю JavaFX, которая, между прочим, весьма динамично развивается (даже не заметил, как вышла версия 2.1). По сравнению со Swing и AWT изменено очень многое. Что-то в сторону упрощения и удобства, но кое-что очень непривычно и поначалу вызывает раздражение. Однако стоит понять общую идею, как приходишь к мысли: «А ведь иначе и быть не должно!» Например, важно понять что такое связывание (binding). В прежних версиях GUI от Java принято было, как и в других средах создания визуальных компонентов, идти именно от видимого: щелкнул курсором по текстовому полю — сработало событие FocusGained или FocusLost, которое очевиднейшим образом обрабатываешь, т.е. меняешь состояние полей, вызываешь методы. Разработчики JavaFX рекомендуют идти от обратного: изменилось состояние некого абстрактного объекта (строки, числа, и т.п.) — происходят изменения в пользовательском интерфейсе. Так что FocusListener или FocusHandler, например, искать в JavaFX бесполезно. Вместо этого делается так:

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 — изменяется и это влечет за собой события. Как производятся сами изменения — это уж забота системы. Программист же должен сосредоточиться на реакции.

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

Изящнее, изящнее, господа программисты

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


  public void createDataBase() throws IOException{
  	boolean dbExist = checkDataBase();
 
    	if(dbExist){
    		//do nothing - database already exist
    	}else{
                // Многа букаф кода...
        }
 }

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


( Читать дальше )
  • +12
  • 10 января 2011, 00:05
  • yababay
  • 2

День рождения языка Perl

23 года назад, 1987-12-18, состоялся релиз первой версии языка программирования Perl.

perl -e 'print "Congratulations!\n"'
  • +4
  • 18 декабря 2010, 11:50
  • yababay
  • 8

Java-приложение как Windows-сервис

По просьбе камрада Gangsta раскрываю подробности работы NSIS-скрипта, описанного в прошлом топике. В нем было перечислено несколько файлов, входящих в тестовый дистрибутив (install.bat, wrapper.properties) и т.п. Что в них находится и зачем они нужны? С точки зрения изучения возможностей установщика NSIS эта информация избыточна: файлы и файлы, которые могли называться как угодно и содержать что угодно. Главное было — положить их в нужную папку на целевой машине. В отладочных целях в том скрипте не был предусмотрен даже автозапуск самопального install.bat (хотя возможности для этого в NSIS есть).

Однако рассмотренный пример интересен еще и тем, что устанавливает на Windows-компьютер Java-приложение в качестве сервиса, а это весьма ценно. Ведь сервис запускается скрытым для обычного пользователя образом (т.е. на экране не маячит дурацкое черное окно), может выполнять привилегированные операции, его можно перезапускать и останавливать. Как всё это реализовать, если речь идет о Java-приложении (в данном случае — Apache Felix)?



( Читать дальше )
  • +6
  • 25 ноября 2010, 15:21
  • yababay
  • 3

NSIS: пример скрипта

NSIS — установщик ПО для Windows — способен выполнять довольно сложные настройки системы в процессе инсталляции. Однако осваивать его лучше на простых примерах. Вот работающий скрипт, устанавливающий среду OSGi (Apache Felix) на Windows-машину в виде сервиса:



( Читать дальше )
  • +2
  • 25 ноября 2010, 00:59
  • yababay
  • 1

Регулярные выражения в JavaScript: флаг g (global)

Осваивая регулярные выражения, нельзя забывать про модификаторы, устанавливаемые после них. Таковых три: i — искать независимо от регистра букв (foobar, FooBar и FOOBAR воспринимаются одинаково). m — многострочный режим, который применяется сравнительно редко (см., напр., здесь). А вот на модификаторе g (global) стоит остановиться подробнее, т.к. иногда про него забывают и удивляются неработающему выражению.



( Читать дальше )
  • +10
  • 19 ноября 2010, 23:56
  • yababay
  • 3

NSIS: установщик ПО для Windows можно собрать и под Linux

NSIS (Null Soft Installer) — легендарный установщик программного обеспечения под Windows от создателя не менее легендарного проигрывателя WinAmp. С дистрибутивами, созданными с помощью NSIS, встречался, без сомнения, каждый пользователь Windows. Пользоваться этим продуктом не стесняются крупные корпорации, благо он распространяется по свободной лицензии. Если при работе какого-нибудь setup.exe вы видите бегущие на черном фоне зеленые строчки, то скорее всего вы имеете дело с NSIS.



Создать дистрибутив с помощью этого SDK довольно просто. Нужно лишь изучить нехитрый синтаксис, составить скрипт и откомпилировать его с помощью консольной утилиты makensis.exe. Подробности легко найти в сети. Однако есть небольшая проблема: если нужно создать кроссплатформенное ПО, то придется вылезать под Windows. Хотя почему придется? NSIS прекрасно работает и под Linux!

( Читать дальше )
  • +10
  • 19 ноября 2010, 02:53
  • yababay
  • 2

OpenJDK: Навались, братва!

OpenJDK — проект по созданию инструментария для Java-разработчиков, состоящего только из свободного и открытого ПО. Дело в том, что лицензия на фирменный JDK от Sun/Oracle очень далека от тех параметров свободы, которые гарантирует GPL. Зато работает быстро и стабильно. OpenJDK ни скоростью, ни стабильностью похвастаться не может, зато полностью свободна от патентных ограничений. Куда же бедному крестьянину податься?




( Читать дальше )
  • +12
  • 16 ноября 2010, 01:30
  • yababay
  • 2

1C 7.7 + Etersoft Wine + PostgreSQL

Довольно часто требуется обеспечить интеграцию программы 1С с другими базами данных. Под Windows это легко запрограммировать с помощью ADO. А как быть, если 1C работает в среде Linux под Wine? ADO с Wine не очень-то стыкуется, к тому же теряется лицензионная чистота. Остается использовать UNIX-way. Например, задействовать демон incron, реагирующий на изменения файлов.

( Читать дальше )