2014-11-20 48 views
0

作爲練習,我一直在嘗試製作一個簡單的tic tac toe遊戲,以瞭解佈局如何在java中工作。現在我有了基本代碼,所有的規則和變量檢查,我找不到如何讓按鈕排列我想要的方式。我想製作一個3x3的按鈕網格,但每當我在網上嘗試一個教程或找到一個有類似問題的人時,它總是會導致按鈕沒有顯示出來。以下代碼獲取屏幕上的按鈕,但不安排它們。在窗口上設置按鈕的位置

package game; 

import java.awt.Color; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Main extends JFrame{ 

    //JPanel 
    JPanel pnlMainBoard = new JPanel(); 

    //Buttons 
    JButton btnTest = new JButton("Test"); 
    JButton btnAI = new JButton("A1"); 
    JButton btnBI = new JButton("B1"); 
    JButton btnCI = new JButton("C1"); 
    JButton btnAII = new JButton("A2"); 
    JButton btnBII = new JButton("B2"); 
    JButton btnCII = new JButton("C2"); 
    JButton btnAIII = new JButton("A3"); 
    JButton btnBIII = new JButton("B3"); 
    JButton btnCIII = new JButton("C3"); 

    public Main(){ 
     //Layout 
     //pnlMainBoard.setLayout(null); 
     //Game set bounds 
     btnTest.setBounds(60,400,220,30);  

     //JPanel bounds 
     pnlMainBoard.setBounds(800,800,200,100);   

     //Add buttons to frame 
     pnlMainBoard.add(btnTest);  
     pnlMainBoard.add(btnAI);   
     pnlMainBoard.add(btnBI);   
     pnlMainBoard.add(btnCI);   
     pnlMainBoard.add(btnAII);  
     pnlMainBoard.add(btnBII);  
     pnlMainBoard.add(btnCII);  
     pnlMainBoard.add(btnAIII);  
     pnlMainBoard.add(btnBIII);  
     pnlMainBoard.add(btnCIII);  
     add(pnlMainBoard);  

     //JFrame Properties 
     setSize(400,400); 
     setTitle("Ultimate Tic Tac Toe"); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
    } 
    public static void main(String[] args) { 
     new Main(); 
    } 

} 

到目前爲止,這是我所創建的唯一代碼,成功地把屏幕上的按鈕,當我改變它的按鈕消失。我如何製作它,以便我可以在窗口上設置我想要它們的按鈕的位置?

+0

而..代碼嘗試使用'GridLayout'的地方? – 2014-11-20 22:16:19

+0

順便說一句 - 考慮將按鈕的網格放入一個'JButton [] [] buttonGrid = new JButton [3] [3];' – 2014-11-20 22:17:57

回答

2

對於一個3x3格檢查出的擺動網格佈局,您可以設置JPanel中使用這樣的:

GridLayout grid = new GridLayout(3,3); 
JPanel.setLayout(grid); 

其中的JPanel是在你的程序的JPanel的名字......

2

enter image description here

import java.awt.*; 
import javax.swing.*; 
import javax.swing.border.EmptyBorder; 

public class ThreeByThreeWithButtonLayout { 

    private JComponent ui = null; 

    ThreeByThreeWithButtonLayout() { 
     initUI(); 
    } 

    public void initUI() { 
     if (ui != null) { 
      return; 
     } 

     int gap = 10; 
     ui = new JPanel(new BorderLayout(4, 4)); 
     ui.setBorder(new EmptyBorder(4, 4, 4, 4)); 

     JButton testButton = new JButton("Test"); 
     JPanel buttonConstrain = new JPanel(
       new FlowLayout(FlowLayout.CENTER, gap, gap)); 
     buttonConstrain.add(testButton); 
     ui.add(buttonConstrain, BorderLayout.PAGE_START); 

     JPanel gridPanel = new JPanel(new GridLayout(0, 3, 5, 5)); 
     gridPanel.setBorder(new EmptyBorder(gap, gap, gap, gap)); 
     ui.add(gridPanel, BorderLayout.CENTER); 
     String[] buttonRows = {"A", "B", "C"}; 
     for (int ii = 1; ii < 4; ii++) { 
      for (String buttonRow : buttonRows) { 
       JButton b = new JButton(buttonRow + ii); 
       b.setFont(b.getFont().deriveFont(32f)); 
       gridPanel.add(b); 
      } 
     } 
    } 

    public JComponent getUI() { 
     return ui; 
    } 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (Exception useDefault) { 
       } 
       ThreeByThreeWithButtonLayout o = new ThreeByThreeWithButtonLayout(); 

       JFrame f = new JFrame("3x3 + Button"); 
       f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
       f.setLocationByPlatform(true); 

       f.setContentPane(o.getUI()); 
       f.pack(); 
       f.setMinimumSize(f.getSize()); 

       f.setVisible(true); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 
0

網格佈局,使一些行和列到你的幀/面板是這樣的:

GridLayout grid = new GridLayout(3,3); 
Jpanel.setLayout(grid);