Как создать «Изменить цвет фона» для нескольких windows в javafx - PullRequest
0 голосов
/ 16 января 2020

Новый для java и javafx, и я кодирую gui, и я пытался найти способ создать кнопку для моей опции windows, которая изменит цвет фона всех windows. В настоящее время я не уверен, как это сделать go.

В основном классе я инициализирую следующую строку и делаю ее глобальной:

public static String background;

В классе параметров у меня есть ColorPicker, а затем преобразовать шестнадцатеричные значения в строку

        colorPicker.setLayoutX(15.0);
        colorPicker.setLayoutY(184.0);

        // 8 symbols.
        String hex1 = Integer.toHexString(colorPicker.getValue().hashCode()); 
        // With # prefix.
        String hex2 = "#" + Integer.toHexString(colorPicker.getValue().hashCode()); 
        // 6 symbols in capital letters.
        String hex3 = Integer.toHexString(colorPicker.getValue().hashCode()).substring(0, 6).toUpperCase();
        background.equals(hex1+hex2+hex3);

Эта строка кода в каждом классе / окне для изменения цвета фона.

        //sets background of current stage
        backgroundpane.styleProperty().set("-fx-background-color: "+background);

Однако, когда я делаю это, я получите эту ошибку: Exception in thread "JavaFX Application Thread" java.lang.NullPointerException, которая указывает на background.equals(hex1+hex2+hex3);

Любая помощь приветствуется

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Ваша шестнадцатеричная строка неполная, вам нужно 6 шестнадцатеричных символов, но, поскольку вы добавляете символ «#», вы получаете только 5 из этих символов. Настройте свою подстроку на substring (0, 7)

Также вам больше не нужно вызывать colorpicker.getValue после первого вызова, так как он хранится в переменной hex1.

Убедитесь, что вы обновляете основные классы stati c свойство background правильно, поэтому вместо background.equals (который только сравнивает фон с чем-то, а не присваивает значение!), Вместо этого используйте MainApp.background = hex3 (MainApp, где бы вы ни находились c свойство живет)

Также убедитесь, что ваше фоновое значение stati c инициализировано допустимой шестнадцатеричной строкой.

0 голосов
/ 16 января 2020

Инициализируйте фоновую строку пустой строкой при объявлении ее, чтобы гарантировать, что она никогда не будет нулевой.

public static String background = "";

Тем не менее, я думаю, что вы хотите назначить новый фон переменной, не проверяя, является ли она уже выбрал. Итак, если это правильно, вы должны заменить background.equals(hex1+hex2+hex3); на:

background = hex1+hex2+hex3;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...