2012-11-07 71 views
0

當我使用eclipse運行我的程序時,只有一個按鈕出現(左上角),但是當我在終端中使用javac時(大部分時間),所有按鈕都顯示出來!這真的讓我煩惱。誰能幫忙?謝謝!
這是我的構造函數:
並非所有按鈕都顯示在Java中?

public TicTacToe(){ 
    super("Farm Tic-Tac-Toe"); 
    setSize(450,750); 
    setVisible(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    Container cont = getContentPane(); 
    cont.setLayout(null); 
    int newLine = 0; 
    int lineCount = 0; 
    for(int i = 0; i < buttons.length; i++){ 
     buttons[ i] = new JButton(blank); 
     if(i == 3 || i == 6){ 
      newLine++; 
      lineCount = 0; 
     } 
     buttons[ i].setBounds(lineCount*150,newLine*150,150,150); 
     cont.add(buttons[ i]); 
     buttons[ i].addActionListener(this); 
     lineCount++; 
    } 
} 

和這裏的動作監聽...

public void actionPerformed(ActionEvent e){ 
    for(int i = 0; i < buttons.length; i++){ 
     if(e.getSource()==buttons[ i]){ 
      if(turn%2==0){ 
       buttons[ i].setName("x"); 
       buttons[ i].setIcon(x); 
       buttons[ i].removeActionListener(this); 
      } 
      else{ 
       buttons[ i].setName("o"); 
       buttons[ i].setIcon(o); 
      } 
      buttons[ i].removeActionListener(this); 
     } 
    } 
    turn++; 
    checkWin(); 
} 



請不要告訴我太多我的代碼設計是如何糟糕,因爲我(不是初學者,但是)不太擅長Java。

+6

我在cont.setLayout(null);'line ...使用'LayoutManager'後停止讀取,否則您會遇到麻煩,因爲您剛剛經歷了艱難的方式 – Robin

+0

...我正在讀一本書這有這個在這麼嗯... – blustone

+4

然後擺脫這本書,因爲它顯然不是一個很好的Swing書 – Robin

回答

1

的解決問題的方法其實非常簡單...

第一個是缺乏佈局管理器,另一個是要在其中顯示您的用戶界面的命令(如已編制說明)

enter image description here

public class SimpleTicTacToe { 

    public static void main(String[] args) { 
     new SimpleTicTacToe(); 
    } 

    public SimpleTicTacToe() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException ex) { 
       } catch (InstantiationException ex) { 
       } catch (IllegalAccessException ex) { 
       } catch (UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Test"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new GamePane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class GamePane extends JPanel { 

     public GamePane() { 
      setLayout(new GridLayout(3, 3)); 
      for (int index = 0; index < 9; index++) { 
       add(new JButton()); 
      } 
     } 

    } 

} 

採取措施,通過Creating a GUI With JFC/Swing閱讀,以獲得基本的掌握時間。

1

Eclipse GUI只渲染以特定方式繪製的按鈕。如果你的代碼做了不同的處理(例如,用循環),Eclipse將無法繪製它。

此外,使用LayoutManager,不要做這樣的事情.setLayout(null)

+0

@ durron567但爲什麼它會顯示第一個按鈕? – blustone

+2

Re'「Eclipse GUI ...」 - 什麼是「Eclipse GUI」,以及Eclipse與當前的任何問題有什麼關係?在我看來,這是一個純粹而簡單的Swing問題,完全與IDE無關。 –

+1

您是否確實暗示,當您將Eclipse用作IDE時,您無法在循環中將按鈕指向面板。如果是這樣的話,沒有自尊心的開發人員會想要觸摸那個IDE – Robin

4

你打電話setVisible(true)之前將所有的組件的圖形用戶界面,所以它沒有顯示它們。不要這樣做。在後添加所有組件後,請撥打setVisible(true)

而且

  • 由於已經被很多建議,不要使用空佈局,而是瞭解並使用的佈局管理器。
  • 是的,得到另一本書。
+1

嗯,應該讀一點。好的結果,而不是這個決議的第一個問題。也許我們應該在常見問題解答或信息標籤中添加這個(如果有人在發佈問題之前讀過這些內容) – Robin

+0

@Robin:確定添加它,但我認爲我們都同意它沒有什麼效果。 –

+0

我不確定如何添加它。爲了進入常見問題解答,看起來你需要一個有很多觀點的問題,所以這不是一個選擇。也許我們可以在Swing wiki中添加一個手動維護的FAQ,類似於Java標記wiki – Robin

相關問題