воскресенье, 2 января 2022 г.

суббота, 1 января 2022 г.

Angel Ceramic

 


 Unique and funny, one of a kind bell ceramic angel. Every item in my store is handmade, each one is painted by hand with a brush. The smiling Angel has blue wings and a small flower in her/his hands. I put my signature inside the bell while I paint with underglaze paints. In my work, I use traditional techniques.

суббота, 4 октября 2014 г.

Autoresize любых объектов в JavaFX

Давно встречаю на просторах сети вопросы по Java FX вроде: "Как сделать так, чтобы некий объект расширялся вслед за расширением родительского окна?". Под неким объектом понимается любой Node объект имеющий Width, Height property.

Помнится много лет назад, когда я еще программировал на Delphi там было удобное свойство у объектов: align client. В JavaFX пока такого нет, но оно и не нужно, есть более удобные в употреблении свойства с большим потенциалом использования. 

Способ 1 (Bind)

У нас есть TreeView и мы хотим, чтобы оно расширялось вместе с родительским окном:


@FXML
AnchorPane anchpane

TreeView tree = new TreeView();
tree.prefWidthProperty().bind(anchPane.widthProperty());
tree.prefHeightProperty().bind(anchpane.heightProperty());
  

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

Способ 2 (ручной)

Если по каким-то причинам мы не можем использовать Bind, можно реализовать и ручное связывание свойств объектов.

anchpane.widthProperty().addListener(new ChangeListener() {
@Override public void changed(ObservableValue observableValue, Number oldSceneWidth,            Number newSceneWidth) {
 System.out.println("Width: " + newSceneWidth);
 //Здесь мы можем отправить к любому нашему объекту новое значение Width
}
});
        
anchpane.heightProperty().addListener(new ChangeListener() {
@Override public void changed(ObservableValue observableValue, Number oldSceneHeight, Number newSceneHeight) {
 System.out.println("Height: " + newSceneHeight);
 //Здесь мы можем отправить к любому нашему объекту новое значение Height
}
});


Способ 3 (FXML)







  
    

Если мы по каким-то причинам не можем использовать код (?), то есть способ и в FXML сделать auto resize.

Мне наиболее удобен bind (у него масса вариаций и возможности применения бесконечны, если Вы не знакомы с этим, срочно отправляйтесь в Google с запросом javafx bind), но возможно есть задачи, когда нужно сделать и "ручное" связывание. Способ с FXML мне кажется не слишком удобным, но кто его знает - бывают очень специфические случаи, вдруг пригодится. 

Надеюсь, теперь у Вас не будет проблем с resize или autosize объектов в JavaFX.

Обязательно читайте: Литература по JavaFX

среда, 17 сентября 2014 г.

Событие закрытия окна в Java FX


Слушать событие закрытия окна можно разными способами.

Событие закрытия окна: 

import javafx.event.EventHandler;

...

 @Override

    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();

        stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
        public void handle(WindowEvent we) {
         System.out.println("Stage is closing");
         }
        });
    }

Предотвратить закрытие окна:

import javafx.event.EventHandler;

...

 @Override

    public void start(Stage stage) throws Exception {

        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));


        Scene scene = new Scene(root);

        stage.setScene(scene);

        stage.show();


        stage.setOnCloseRequest(new EventHandler<WindowEvent>(){

        @Override

         public void handle(WindowEvent event) {

          event.consume();

         }

        });

    }


Событие закрытия приложения:

public class WindowCloseTestApp extends Application {

   

    @Override

    public void start(Stage stage) throws Exception {

        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

        Scene scene = new Scene(root);

        stage.setScene(scene);

        stage.show();

    }


    public static void main(String[] args) {

        launch(args);

    }

    @Override

    public void stop(){

     //Здесь Вы можете прописать все действия при закрытии Вашего приложения.

    }

    @Override

    public void init(){

    //Инициализация любых данных, до включения основного потока Start в работу.

    //К теме не относится, но тоже полезно!

    }

}


Оф. документация: жизненный цикл приложений java.


Литература по JavaFX

пятница, 12 сентября 2014 г.

Аннотация Override


Пример работы с аннотацией Override в языке Java

Задача программы вывод голосов разных существ. Мы будем работать с 3 видами: это собака, кошка и рыба. Предположим, что мы пишем некое игровое приложение и нам необходимо выводить звуки разных животных но, среди животных есть те, которые не произносят явных звуков, но они входят в общий класс Pet и используют общий метод Voice. Для того, чтобы персонализировать метод Voice для определенного суб класса (Fish) мы будем использовать аннотацию Override.