Введение в JavaFX – Модель шахмат - Графический интерфейс пользователя

ОГЛАВЛЕНИЕ

Графический интерфейс пользователя

Давайте теперь приступим к созданию шахматной программы. Сначала необходимо создать окно для нашего приложения. В Java для этого нужно использовать класс JFrame. Эквивалентным классом в JavaFX является Stage. Ниже показано, как окно создается в Java и в JavaFX:

Создание окон в Java и в JavaFX

// код Java
import java.io.*;
import javax.swing.*;

public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Chess");
        frame.setBounds(100, 100, 400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        String workingDir = System.getProperty("user.dir");
        String iconFilename =
        workingDir + File.separator + "res" + File.separator + "Icon32.png";
        ImageIcon icon = new ImageIcon(iconFilename);
        frame.setIconImage(icon.getImage());
        frame.setVisible(true);
    }
}

// код JavaFX
import java.io.*;
import java.lang.*
import javafx.scene.image.*;
import javafx.stage.*;

def stage: Stage = Stage {
    title: "Chess"
    x: 100, y: 100, width: 100, height: 100
    icons: [ Image {url: "{__DIR__}res{File.separator}Icon32.png" } ]
    onClose: function() {
        System.exit(0);
    }
}

JavaFX содержит множество ошибок

Ниже приводятся скриншоты каждого из двух приложений. Java приложение имеет пользовательскую иконку с изображением шахмат, в то время как JavaFX приложение имеет заданную по умолчанию иконку Java приложения. Это первая из тех нескольких ошибок, которые мы нашли в JavaFX. Невозможно загрузить пользовательскую иконку в приложение на JavaFX. Есть форумы, в которых обсуждаются ошибки - bug1 и bug2. Согласно документации JavaFX 1.1 docs, вы должны иметь возможность установить иконку для Stage. К сожалению, это не работает. Так что придется оставить иконку Java по умолчанию. Есть надежда, что эта проблема вскоре будет разрешена.

JavaFX версии 1.1 все еще содержит много ошибок, к примеру, вы не можете изменить иконку для главного окна.

Создание объектов

В Java новые классы создаются с помощью ключевого слова new. В JavaFX вы не должны использовать ключевое слово new. Обычно новый объект создается путем присваивания переменной имени класса и, после этого, присваивания начальных значений атрибутам класса внутри фигурных скобок ({}). Начальное имя атрибута класса устанавливается путем указания имени атрибута, вслед за ним указывается символ двоеточия : , а после двоеточия указывается начальное значение атрибута класса. Вы можете помещать запятые между каждым присвоением значений атрибутам класса, но это необязательно. В предыдущем примере запятые используются только между атрибутами, которым мы присваиваем значения в одной и той же строке (атрибуты x, y, width и height). Атрибут icons является последовательностью, поэтому мы помещаем иконку для Stage внутрь квадратных скобок []. Иконка является экземпляром объекта Image. Экземпляр этого класса создается аналогичным образом путем присвоения начальных значений атрибутам класса внутри фигурных скобок. В этом случае мы записываем в атрибут url местоположение графического файла, используемого в качестве иконки. Атрибут onClose инициализируется значением указателя на функцию. Функция просто вызывает System.exit(0).

Вы можете использовать ключевое слово new для создания экземпляров классов. В данном примере программа JavaFX работает аналогично предыдущему примеру, но использует new для создания Stage. Классы в JavaFX не имеют конструкторов. Поскольку Stage – это класс JavaFX, нельзя назначить начальные значения объекту с помощью передачи значений в конструктор (так как конструкторов нет). Так что значения атрибутам класса назначаются после создания нового объекта, как показано далее в примере кода:

Вы можете использовать ключевое слово "new" для создания объектов JavaFX.

import java.io.*;
import java.lang.*;
import javafx.scene.image.*;
import javafx.stage.*;

def stage: Stage = new Stage();
stage.title = "Chess";
stage.x = 100;
stage.y = 100;
stage.width = 400;
stage.height = 400;
stage.icons = [ Image { url: "{__DIR__}res{File.separator}Icon32.png" } ];
stage.onClose = function() {
    System.exit(0);
};

При создании объектов Java важно создавать их с помощью ключевого слова new, потому что объекты Java имеют конструкторы, и этим конструкторам можно передавать параметры, используя ключевое слово new. При создании объектов JavaFX мы предпочитаем не использовать ключевое слово new. По-нашему, код выглядит понятнее, когда мы создаем объекты без него и присваиваем  начальные значения всем атрибутам класса, используя закрывающие круглые скобки, {}, как показано в первом примере.