在Java中更改背景颜色的RadioButton

在Java中更改背景颜色的RadioButton,java,javafx,background-color,Java,Javafx,Background Color,伙计们,我正在尝试创建3个单选按钮,它们将改变我在JavaFX中的背景颜色。我被卡住了,我得到了updateBackGround方法中找不到的错误符号,特别是pane1.setBackgroundnew Java找不到pane1符号。请帮帮我。非常感谢你。下面是我的代码 import javafx.application.Application; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.sce

伙计们,我正在尝试创建3个单选按钮,它们将改变我在JavaFX中的背景颜色。我被卡住了,我得到了updateBackGround方法中找不到的错误符号,特别是pane1.setBackgroundnew

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)));        
      }

   }
}
`

您既有一个返回窗格的方法pane1,也有一个局部变量pane1,它是一个GridPane

稍后,在updateBackground中,您将引用pane1,它看起来像是对类成员或局部变量的引用,但updateBackground中既没有类成员,也没有名为pane1的变量

updateBackground没有看到在pane1方法中声明的pane1变量。它也看不到在start中创建的myPane1窗格,只有从SetScene1中设置的scene1检索才能访问该窗格

这主要是Java的作用域规则问题,并不特定于JavaFX。

您既有一个返回窗格的方法pane1,也有一个局部变量pane1,它是一个GridPane

稍后,在updateBackground中,您将引用pane1,它看起来像是对类成员或局部变量的引用,但updateBackground中既没有类成员,也没有名为pane1的变量

updateBackground没有看到在pane1方法中声明的pane1变量。它也看不到在start中创建的myPane1窗格,只有从SetScene1中设置的scene1检索才能访问该窗格


这主要是Java的作用域规则问题,并不特定于JavaFX。

这是否有帮助:这是否有帮助:我明白了,所以该方法无法识别我的变量。你对如何解决这个问题有什么建议吗?我试图将Pane1方法重命名为其他名称,但到目前为止不起作用。@HaiVo-重命名使方法和变量不具有相同的Pane1名称是好的,可以减少混淆。我看过JavaFX,但没有在任何实际工作中使用它,因此可能与任何建议不符…我在pane1中看到您正在设置。setOnActionevent->updateBackGround-pane1确实可以访问该变量,所以可能是.setOnActionevent->updateBackGroundpane1并向方法updateBackGroundPane p中添加一个参数,使其内部为p.setBackground…好的,我让它工作了,非常感谢您的帮助。在隔离期间保持安全。我明白了,所以该方法无法识别我的变量。你对如何解决这个问题有什么建议吗?我试图将Pane1方法重命名为其他名称,但到目前为止不起作用。@HaiVo-重命名使方法和变量不具有相同的Pane1名称是好的,可以减少混淆。我看过JavaFX,但没有在任何实际工作中使用它,因此可能与任何建议不符…我在pane1中看到您正在设置。setOnActionevent->updateBackGround-pane1确实可以访问该变量,所以可能是.setOnActionevent->updateBackGroundpane1并向方法updateBackGroundPane p中添加一个参数,使其内部为p.setBackground…好的,我让它工作了,非常感谢您的帮助。在隔离期间保持安全。