2011-10-05 62 views
2

我在着色JButton数组时遇到了问题。在Java中着色JButton

我做了Jbutton将两个数组:

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不使用网络,该网络按我的需要工作。

任何帮助表示赞赏,

感谢杰夫

编辑: 如果我把我的代码,它工作正常的MouseListeners的一个,而是有它被自动着色,而不必点击每个时间。

class Klaar extends MouseAdapter { 

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

Ps。我的第一语言不是英语,我希望你能理解我的问题。

+1

您是否确认'hokVerkleur'实际上被调用?如果它没有被调用,那么代码试图做什么并不重要。使用调试器或'System.out.println(“debug”)'语句来调试你的程序,并找出*正在工作。在您向我们提供这些信息之前,您没有投入足够的精力来帮助我们(请参阅:[SSCCE](http://sscce.org))。 –

+0

当我使用'System.out.println(“Position”+ loc);'在hokVerkleur中打印出应该改变的位置。 – Jef

+0

'kleur'是一个对象吗? – fireshadow52

回答

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

同意,如果你的JButton从BackGroung任务改变颜色,那么有没有什么变化,你有一些问题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 rellated代码为javax.swing.Action

2B)从

+0

@stereofrog没有问题,给你我的...... 1)'我投票表示,作为题外话,'2)'不是你的贬低选民,向下投票是为了上帝,'3)'你的问题更多比本机操作系统相关的问题,'4)'那里我看不到有关PL''的真正问题''问题相关http://programmers.stackexchange.com/或http://superuser.com/'6) '也许是真的,你的问题将被转移到另一个论坛(而不是关闭) – mKorbel

+0

非常感谢你:) – Jef

+0

高兴镐帮助,请从您选择的选项.... – mKorbel

0

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

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

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