我正在努力解决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);
}
}
聚苯乙烯。我的第一语言不是英语,我希望你能理解我的问题。
答案 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任务Runnble#Tread
答案 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();
}