我正在创建一个GUI,您首先单击一个单选按钮来定义一个变量,然后单击一个按钮。然后,此按钮测试该变量,然后根据整数等于执行两个不同的操作。我的问题是,当我点击按钮时,没有注册用单选按钮定义的变量。我需要让按钮利用的动作监听器能够找到这个变量。这是我的代码的一部分:
radioButtonYes.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
int a = 1;
}
});
radioButtonNo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
int a = 2;
}
});
submitOne.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(a == 1){
frame.setVisible(false);
JPanel panelFour = new JPanel();
JLabel labelTwo = new JLabel("Stuff");
panelFour.add(labelTwo);
frame.remove(panelOne);
frame.remove(panelTwo);
frame.remove(submitOne);
frame.add(panelFour);
frame.setVisible(true);
}else{
frame.setVisible(false);
JPanel panelFive = new JPanel();
JLabel labelThree = new JLabel("Alternate stuff");
panelFive.add(labelThree);
frame.remove(panelOne);
frame.remove(panelTwo);
frame.remove(submitOne);
frame.add(panelFive);
frame.setVisible(true);
}
}
});
答案 0 :(得分:3)
动作侦听器是静态方法,如果不是在方法本身内部创建,则只能定位静态变量。如果您希望这样做,我建议如下:
创建一个全局变量 static int a;
然后使用所有方法删除变量前面的int,这样它们就可以定位全局变量并将其设置为您正在寻找的正确值
radioButtonNo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
a = 2;
}
});
答案 1 :(得分:2)
确定。试试:
radioButtonYes.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if( e.getSource() == radioButtonYes) {
int a = 1;
}
}
});
将radioButtonYes改为任何......
答案 2 :(得分:1)
您无法从声明它的块外部访问局部变量。您甚至被允许声明int a = 1;
这一事实清楚地表明它是一个严格的局部变量。您必须在代码中的其他位置声明其他int
,否则if(a == 1){
将无法执行。
无论哪种方式,您都不需要为单选按钮创建侦听器。对于您的测试,只需看看是否选择了yesRadioButton:
if(radioButtonYes.isSelected()){
...
}
当然,必须在Java 8之前将yesRadioButton
声明为final
。
如果您使用的是Java 8,那么它只需要是有效的,这意味着它不会在任何地方进行修改。
在Java 8中,也可以简化声明ActionListener:
submitOne.addActionListener( e -> {
...
}):
答案 3 :(得分:1)
没有办法让局部变量全局变量作为变量的范围' a'单击submitOne按钮时丢失,因此声明变量' a' global.so它将保留最后点击按钮的值。