用Java着色JButton

时间:2011-10-05 17:02:53

标签: java swing jbutton colorize

我正在努力解决JButton数组的着色问题。

我制作了两个JButtons阵列:

public JButton Speler1[] = new JButton[140]; //Player1
public JButton Speler2[] = new JButton[140]; //Player2

这两个按钮阵列构成了赛车游戏的第1道和第2道。我希望玩家1和2的位置在两个屏幕上都是彩色的。因此,玩家1可以看到玩家2的位置,反之亦然。

我已经制作了一个方法,将两个玩家的位置发送给彼此。

if (message.contains("Positie")) {
   String posit = message.replaceFirst("Positie", "");
   int positi = Integer.valueOf(posit);
   positie2 = positi;
   kleurHokje kleur = new kleurHokje();
   kleur.hokVerkleur(positi); // positi is the position of each player
}

因此,当我调用方法hokVerkleur(positi)时,我想更改第2道的按钮。

class kleurHokje{
    public void hokVerkleur(int loc){
        Speler2[loc].setBackground(Color.yellow);
        Speler2[positie2].setBackground(Color.gray);                
    }
}

它不会工作。虽然我对Speler1 [positie]做的几乎一样,但Speler1不使用网络,这可以按照我的意愿运作。

感谢任何帮助,

谢谢杰夫

编辑: 如果我将我的代码放在其中一个MouseListener中,它可以正常工作,而是让它自动着色而不必每次都单击。

 class Klaar extends MouseAdapter {

    public void mouseClicked(MouseEvent e) {            
        Speler2[positie2].setBackground(Color.gray);
    }
}

聚苯乙烯。我的第一语言不是英语,我希望你能理解我的问题。

2 个答案:

答案 0 :(得分:4)

If I place my code in one of the MouseListeners it works fine:

同意,如果你从BackGroung Task更改了Color for JButton,那么有任何变化,你有Concurency in Swing的问题,你更新到GUI是在EDT之外,

1)然后你必须将着色JButtons包装到invokeLater();

    java.awt.EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            Speler2[loc].setBackground(Color.yellow);
            Speler2[positie2].setBackground(Color.gray);
        }
    });

2)但你必须使用常规的Swing方法来解决

2a)将GUI相关代码包装到javax.swing.Action

2b)从

初始化BackGroung任务

答案 1 :(得分:0)

制作一个可运行的线程,作为一个魅力。感谢大家的帮助。

public void actionThread() {
    Thread t = new Thread() {

        public void run() {
            while (!stop) {
                tegenspelerPositie();
                Score();
                eigenOgen();
                try {
                    sleep(100);
                } catch (InterruptedException ex) {
                }
            }
        }
    };
    t.start();
}