需要在动作侦听器公共中创建变量

时间:2015-01-01 02:19:23

标签: java swing actionlistener jradiobutton

我正在创建一个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);
        }

    }
});

4 个答案:

答案 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它将保留最后点击按钮的值。