使多个JTextField更改颜色Java

时间:2014-10-13 16:15:08

标签: java arrays swing timer jtextfield

我试图通过使用数组使随机JTextField的黄色。我只设法将1个文本字段设为黄色,然后在每次点击1秒后再设置为白色。我想要做的是当您按下按钮时,第一个随机化的Textfield变为黄色然后变为白色。当你第二次按下第一个随机文本字段时,秒数将变为黄色,然后是白色,依此类推。数组工作正如你所见,我打印它,当你按下按钮时,按顺序打印所有随机数字。

问题是JTextField无法处理int,而且显然必须是“最终”,因此很难使JTextField的黄色成倍增加。我将我的数组粘贴到您身上,以便您可以更好地了解我正在尝试做的事情。有谁知道解决方案?

//我的阵列

JTextField[] boxes = new JTextField[9]; //Array for the textfields
int[] clicked = new int[100];
int clickAmount = 0;

//在启动时,它使用textfield填充box数组:

 boxes[0] = textfield1;
 boxes[1] = textfield2;
 boxes[2] = textfield3;
 boxes[3] = textfield4;
 boxes[4] = textfield5;
 boxes[5] = textfield6;
 boxes[6] = textfield7;
 boxes[7] = textfield8;
 boxes[8] = textfield9;


 public void timePaus (final JTextField textfield) {

     new Timer(1000, new ActionListener() {
         public void actionPerformed (ActionEvent e) {
             textfield.setBackground(Color.white);
             // stop the timer
             ((Timer) e.getSource()).stop();
         }

     }).start();  

}


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)  {   //Button

    int randomint = this.randomBox(); //Finds a number between 0-8
    final JTextField ThatTextfield = boxes[randomint]; //Puts a textfield into an array
    clicked[clickAmount] = randomint+1; //adds textfield number into an array
    clickAmount++;

    ThatTextfield.setBackground(Color.yellow); //make choosen textfield yellow


    for (int i = 0; i < clickAmount; i++)
    {
        timePaus(ThatTextfield); //make choosen textfield  white after 1 sec
        System.out.println(clicked[i]);  
    }
}

1 个答案:

答案 0 :(得分:3)

考虑:

  • 将您的JTextField放在ArrayList<JTextField>中,但是为了避免不必要的重复而在for循环中创建它们。
  • 如果要随机化ArrayList,请在JTextField列表中调用Collections.shuffle(myTextFieldList)
  • 为您的班级提供一个int maxIndex字段。
  • 在你的Swing计时器中,遍历现在随机化的JTextFields列表,将每个列表显示为maxIndex所持有的值,而不是高于List的大小。
  • 增加计时器中的maxIndex。
  • 或者,您可以再创建两个ArrayList<JTextField>,一个用于随机播放收集的文本字段。然后从按钮的侦听器中的此列表中删除第0个JTextField,并将其放入另一个ArrayList中,然后遍历Timer中的第二个ArrayList的JTextfield。