2011-10-05 83 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(); 
}