Java如何在循环外部使用在for循环中创建的JButton?

时间:2017-04-06 21:43:11

标签: java arrays swing jbutton

我的观点是如何使用for循环之外的方法。我无法在外面使用,因为所有按钮都是为循环创建的。每当我创建一个数组按钮,然后我给出一些按钮的属性,他们不会工作

private clicks = 0;
JButton[] test = new JButton[24];
for(i=0; i < 24; i++){
    test[i] = new JButton("" + i);
    test[i].setBackground(Color.YELLOW);
    //and some properties ,action listener
    if((clicks < 15) && clicks % 5 !=0 ) {
        test[].setVisible(False);// i don't know what to write in "[]"
    }
    clicks++;
    else if(clicks%5 == 0) {
        JOptionPane.showMessageDialog(p1, calculateAverage(anArrayList));
    } //calculate average is a method that i created it
}
   test[].addActionListener(new ActionListener() {//i dont know what to write in [] 

                public void actionPerformed(ActionEvent e) {    

                    if((clicks < 15) && clicks % 5 !=0 ) {
            test[].setVisible(False);// i don't know what to write in "[]"

        }
        clicks++;
        else if(clicks%5 == 0) {
            JOptionPane.showMessageDialog(p1, calculateAverage(anArrayList));
         } 
     }     

calculateAverage方法总是给出相同的输出。我怎样才能解决这个问题?当我将if-else代码放在循环外部时,我无法使用按钮。

1 个答案:

答案 0 :(得分:1)

不完全确定你要做什么,但我会猜测并说明:

  1. 您不需要数组来跟踪按钮
  2. 您不需要为每个按钮
  3. 创建一个新的ActionListener
  4. 创建按钮时,应将ActionListener添加到按钮
  5. 而是创建一个由所有按钮共享的常规ActionListener,并在创建按钮时将侦听器添加到按钮。然后,您可以同时将buton添加到面板中,这样就不需要Array了。代码的基本结构可以是:

    ActionListener al = new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            JButton button = (JButton)e.getSource();
    
            if (...)
                button.setVisible( false ); 
        }
    };
    
    for (...)
    {
        JButton button = new JButton(...);
        button.addActionListener( al );
        panel.add( button );
    }