Как отображать цвет на круге с помощью группы переключателей радиокнопки - PullRequest
0 голосов
/ 08 апреля 2019

Я работаю над некоторыми домашними заданиями перед экзаменами, и мне нужно кое-что прояснить, например, как я устанавливаю цвет круга для отображения того, что пользователь выбирает из группы переключателей на экране.Я получаю сообщение об ошибке, и код работает, чтобы отобразить размер круга, но когда я добавляю цвет на картинке, не отображается, когда я нажимаю кнопку создания.Я получаю сообщение об ошибке «Исключение в потоке» Поток приложения JavaFX »java.lang.IllegalArgumentException: Неверная спецификация цвета» и не может найти решение проблемы в сети

Я попытался выполнить приведенный ниже код, и он делаетне работает вообще.

    HBox circleColour = new HBox();
    circleColour.setSpacing(20);
    Label task7 = new Label("What colour do you want the circle: ");
    RadioButton brown = new RadioButton("Brown ");
    RadioButton cyan = new RadioButton("Cyan ");
    RadioButton grey = new RadioButton("Grey ");

    ToggleGroup fillColour = new ToggleGroup();
    brown.setToggleGroup(fillColour);
    cyan.setToggleGroup(fillColour);
    grey.setToggleGroup(fillColour);


      HBox newC = new HBox();
     layout.setRight(newC);

     click.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent e) {
            //radius
            double newRadius = Double.parseDouble(circleSize.getText());
            circle = new Circle(newRadius);

            //This does not display
            //fill colour
            RadioButton selectedRB = 
      (RadioButton)fillColour.getSelectedToggle();
            String colour = selectedRB.getText();
            System.out.println(colour);
            Color fc = Color.valueOf(colour);
            circle.setFill(fc);

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Я полностью согласен с slaw, хотя есть еще одна опция, которую он не добавил, и которая потребует меньшего количества изменений кода и ее использования .trim(), которая «Возвращает копию строки с начальным и конечным пробелы опущены. " который бы выглядел так

RadioButton brown = new RadioButton("Brown ");

Color color = Color.valueOf(brown.getText().trim());
1 голос
/ 09 апреля 2019

IllegalArgumentException выбрасывается Color.valueOf(String), когда:

[...] значение указывает неподдерживаемое имя цвета или недопустимое шестнадцатеричное значение

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

  • "Brown ""Brown"
  • "Cyan ""Cyan"
  • "Grey ""Grey"

Если у вас есть эти пробелы по какой-либо причине или иным образом не хотите использовать Color.valueOf, тогда другой вариант - связать каждый RadioButton с Color.Есть как минимум два способа сделать это:

  1. Использование Map<RadioButton, Color> (или Map<Toggle, Color>, если вы предпочитаете).

    Map<Toggle, Color> colors = new HashMap<>();
    
    RadioButton brown = new RadioButton("Brown ");
    colors.put(brown, Color.BROWN);
    
    // retrieval...
    Color color = colors.get(fillColor.getSelectedToggle());
    
  2. Установка пользовательских данных каждого RadioButton (интерфейс Toggle также объявляет методы setUserData и getUserData).

    RadioButton brown = new RadioButton("Brown ");
    brown.setUserData(Color.BROWN);
    
    // retrieval...
    Color color = (Color) fillColor.getSelectedToggle().getUserData().
    

Использование одного из этих вариантов предпочтительнее.Вы столкнетесь с проблемами при использовании текста RadioButton, когда или если вы интернационализируете приложение.

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