RadioButton для изменения цвета фона в Java - PullRequest
1 голос
/ 07 апреля 2020

ребята, я просто пытаюсь создать 3 радио-кнопки, которые изменят мой цвет фона в JavaFX. И я застрял, я получил эту ошибку «Символы не найдены» в методе updateBackGround (), а именно «pane1.setBackground (new ....»

Java не удалось найти «pane1» Пожалуйста, помогите мне. Большое вам спасибо. Ниже мой код.

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.scene.paint.Color;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.CornerRadii;

public class Project2 extends Application
{
   public RadioButton RedButton;
   public RadioButton BlueButton;
   public RadioButton GreenButton;

   public static void main(String[] args) {
      launch(args);
   }

   public void start(Stage primaryStage)
   {
      Pane myPane1 = pane1();   
      Scene scene1 = new Scene(myPane1);    
      primaryStage.setScene(scene1);    
      primaryStage.setTitle("HAI VO");
      primaryStage.show();
   }

   public Pane pane1()
   {
     ToggleGroup group1 = new ToggleGroup();

     RedButton = new RadioButton("RED");
     RedButton.setToggleGroup(group1);
     RedButton.setOnAction(event -> updateBackGround());

     BlueButton = new RadioButton("BLUE");
     BlueButton.setToggleGroup(group1);
     BlueButton.setOnAction(event -> updateBackGround());

     BlueButton.setSelected(true);

     GreenButton = new RadioButton("Green");
     GreenButton.setToggleGroup(group1);
     GreenButton.setOnAction(event -> updateBackGround());

     GridPane pane1 = new GridPane();

     pane1.add(RedButton,5,0);
     pane1.add(GreenButton,10,0);
     pane1.add(BlueButton,20,0);

     pane1.setHgap(5);
     pane1.setVgap(5);

     pane1.setPadding(new Insets(20,20,20,20));

     updateBackGround();
     return pane1;
   } 

   public void updateBackGround()
   {
      if (RedButton.isSelected()) {
          pane1.setBackground(new Background(new BackgroundFil(Color.RED,CornerRadii.EMPTY, Insets.EMPTY)));
      }

      if (BlueButton.isSelected()) {
          pane1.setBackground(new Background(new BackgroundFill(Color.BLUE,CornerRadii.EMPTY, Insets.EMPTY)));
      }

      if (GreenButton.isSelected()) {
          pane1.setBackground(new Background(new BackgroundFill(Color.GREEN,CornerRadii.EMPTY, Insets.EMPTY)));        
      }

   }
}
`

1 Ответ

3 голосов
/ 07 апреля 2020

У вас есть метод pane1(), который возвращает Pane, и в этом методе у вас есть локальная переменная pane1, которая GridPane.

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

updateBackground не видит переменную pane1, объявленную в методе pane1(). Он также не видит панель myPane1, созданную в start(), которая будет доступна только после извлечения ее из scene1, установленного в setScene (scene1)

This это в основном вопрос правил области действия Java и не указывается c для JavaFX.

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