2013-04-04 127 views
1

我正在尝试制作Tic tac脚趾的界面。我为我的9个字段使用了JLabels方法。程序中没有错误,但有些东西我不知道如何去做。请在下面看我的问题&请给我建议如何设置TicTacToe游戏项目的界面?

import javax.swing.*; 
import java.awt.*; 
import java.awt.geom.*; 

public class ticTac extends JFrame 
    { 
    static JLabel label0 = new JLabel(); 
    static JLabel label1 = new JLabel(); 
    static JLabel label2 = new JLabel(); 
    static JLabel label3 = new JLabel(); 
    static JLabel label4 = new JLabel(); 
    static JLabel label5 = new JLabel(); 
    static JLabel label6 = new JLabel(); 
    static JLabel label7 = new JLabel(); 
    static JLabel label8 = new JLabel(); 
    static JLabel[] choiceLabel = new JLabel[9]; 

    static ImageIcon burger = new ImageIcon("Cross.jpg"); 

public static void main(String []args) 
    { 
     new ticTac().show(); 
    } 

public ticTac() 
    { 
     setVisible(true); 
     setSize(450,450); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

     getContentPane().setLayout(new GridBagLayout()); 
     GridBagConstraints myGrid = new GridBagConstraints(); 

     GridBagConstraints gridConstraints; 
     choiceLabel[0] = label0; 
     choiceLabel[1] = label1; 
     choiceLabel[2] = label2; 
     choiceLabel[3] = label3; 
     choiceLabel[4] = label4; 
     choiceLabel[5] = label5; 
     choiceLabel[6] = label6; 
     choiceLabel[7] = label7; 
     choiceLabel[8] = label8; 

此方法绘制从1标签9在水平行,所以我不希望出现这种情况,我想我的计划将绘制三个框一排,三排在第二排和三个框。请帮帮我。

 for (int i = 0; i < 9; i++) 
      { 
       gridConstraints = new GridBagConstraints(); 
       choiceLabel[i].setPreferredSize(new Dimension(burger.getIconWidth(), burger.getIconHeight())); 
       choiceLabel[i].setOpaque(true); 
       choiceLabel[i].setBackground(Color.RED); 
       gridConstraints.gridx = i; 
       gridConstraints.gridy = 0; 
       gridConstraints.insets = new Insets(10, 10, 10, 10); 
       getContentPane().add(choiceLabel[i], gridConstraints); 



     pack(); 
     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
     setBounds((int) (0.5 * (screenSize.width - getWidth())), (int) (0.5 * (screenSize.height - getHeight())), getWidth(), getHeight()); 
    } 
} 
} 

回答

3

你可以使用一个GridLayout

enter image description here

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import static tictactoe.TicTacToe.choiceLabel; 

public class LayoutTicTacToe { 

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

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

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new GridLayout(3, 3, 10, 10)); 

       choiceLabel[0] = new JLabel("_"); 
       choiceLabel[1] = new JLabel("_"); 
       choiceLabel[2] = new JLabel("_"); 
       choiceLabel[3] = new JLabel("_"); 
       choiceLabel[4] = new JLabel("_"); 
       choiceLabel[5] = new JLabel("_"); 
       choiceLabel[6] = new JLabel("_"); 
       choiceLabel[7] = new JLabel("_"); 
       choiceLabel[8] = new JLabel("_"); 

       for (int i = 0; i < 9; i++) { 
        choiceLabel[i].setText("_"); 
        choiceLabel[i].setHorizontalAlignment(JLabel.CENTER); 
        choiceLabel[i].setVerticalAlignment(JLabel.CENTER); 
        choiceLabel[i].setOpaque(true); 
        choiceLabel[i].setBackground(Color.RED); 
        frame.add(choiceLabel[i]); 
       } 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 

或者,如果你真的被困在GridBagLayout正在...

import java.awt.Color; 
import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import static tictactoe.TicTacToe.choiceLabel; 

public class LayoutTicTacToe { 

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

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

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new GridBagLayout()); 

       choiceLabel[0] = new JLabel("_"); 
       choiceLabel[1] = new JLabel("_"); 
       choiceLabel[2] = new JLabel("_"); 
       choiceLabel[3] = new JLabel("_"); 
       choiceLabel[4] = new JLabel("_"); 
       choiceLabel[5] = new JLabel("_"); 
       choiceLabel[6] = new JLabel("_"); 
       choiceLabel[7] = new JLabel("_"); 
       choiceLabel[8] = new JLabel("_"); 

       GridBagConstraints gbc = new GridBagConstraints(); 
       gbc.insets = new Insets(10, 10, 10, 10); 
       int col = 0; 
       int row = 0; 
       for (int i = 0; i < 9; i++) { 
        gbc.gridx = col; 
        gbc.gridy = row; 
        choiceLabel[i].setText("_"); 
        choiceLabel[i].setHorizontalAlignment(JLabel.CENTER); 
        choiceLabel[i].setVerticalAlignment(JLabel.CENTER); 
        choiceLabel[i].setOpaque(true); 
        choiceLabel[i].setBackground(Color.RED); 
        frame.add(choiceLabel[i], gbc); 
        col++; 
        if (col > 2) { 
         col = 0; 
         row++; 
        } 
       } 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 

更新反馈

只是一些友好的反馈...

  • 有延长JFrame,你不添加任何其功能显著真的没有任何意义。最好使用JPanel,然后将其添加到JFrame的实例中。如果没有别的,你现在可以选择将它添加到你喜欢的任何其他容器中。
  • 在大多数情况下,有没有必要使用JFrame#getContentPane(除非你使用的是Java 1.4或更低),为setLayoutadd(还有一大堆别人的)被映射到直接使用getContentPane
  • 如果要将画面居中放置在屏幕中间,请使用setLocationRelativeTo(null)。使用起来更简单。如果可以,尽量避免使用setBounds
  • 您应该确保使用事件派发线程的上下文启动您的UI。看看Initial Threads进一步的细节
+0

谢谢........你真棒.. – CRazyProgrammer 2013-04-04 07:41:46