0

我正在使用 setBounds(空布局)在 Swing 中创建一个简单的井字游戏应用程序。

我的问题是我最后添加的任何组件,在框架中都不可见,或者扭曲了整个 GUI。我的代码会更好地解释这一点

import java.awt.*;
import javax.swing.*;
class ZeroKata
{
    ButtonGroup p1group,p2group;
    Font f;
    JButton begin,b1,b2,b3,b4,b5,b6,b7,b8,b9;
    JCheckBox p1K,p2K,p1Z,p2Z;
    JFrame frame;
    JLabel player1,player2,p1Name,p2Name,p1Symbol,p2Symbol,status,dummy; //  dummy label for my problem
    JPanel buttons;
    JTextField name1,name2;
    private void addComponents(Container parent,JComponent...c)
    {
        for(JComponent C:c)
            parent.add(C);
    }
    public ZeroKata()
    {
        frame = new JFrame("Tic Tac Toe");
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.setSize(900,650);
        frame.setResizable(true);
        frame.setVisible(true);

        buttons = new JPanel();
        buttons.setLayout(new GridLayout(3,3,10,10));
        begin = new JButton("START GAME");
        b1 = new JButton(" ");
        b2 = new JButton(" ");
        b3 = new JButton(" ");
        b4 = new JButton(" ");
        b5 = new JButton(" ");
        b6 = new JButton(" ");
        b7 = new JButton(" ");
        b8 = new JButton(" ");
        b9 = new JButton(" ");

        p1K = new JCheckBox("X");
        p1Z = new JCheckBox("O");
        p2K = new JCheckBox("X");
        p2Z = new JCheckBox("O");

        p1group = new ButtonGroup();
        p2group = new ButtonGroup();

        p1group.add(p1K);
        p1group.add(p1Z);
        p2group.add(p2K);
        p2group.add(p2Z);

        name1 = new JTextField(30);
        name2 = new JTextField(30);

        f = new Font("Georgia",Font.PLAIN,38);
        player1 = new JLabel (" << PLAYER 1 >>");
        p1Name = new JLabel ("NAME : ");
        p1Symbol = new JLabel ("SYMBOL : ");
        player2  = new JLabel ("<< PLAYER 2 >>");
        p2Name = new JLabel ("NAME : ");
        p2Symbol = new JLabel ("SYMBOL : ");
        status = new JLabel ("GAME STATUS -->> ");
        dummy = new JLabel ("   ");

        addComponents(buttons,b1,b2,b3,b4,b5,b6,b7,b8,b9);

        player1.setBounds(100,100,100,30);
        p1Name.setBounds(120,150,100,30);
        p1Symbol.setBounds(120,200,60,30);
        player2.setBounds(100,250,100,30);
        p2Name.setBounds(120,300,100,30);
        p2Symbol.setBounds(120,350,50,30);
        name1.setBounds(200,150,150,30);
        p1K.setBounds(200,200,50,30);
        p1Z.setBounds(250,200,50,30);
        name2.setBounds(200,300,150,30);
        p2K.setBounds(200,350,50,30);
        p2Z.setBounds(250,350,50,30);
        buttons.setBounds(500,100,250,250);
        dummy.setBounds(20,20,30,30);
        begin.setBounds(200,500,150,30);

        frame.add(player1);
        frame.add(p1Name);
        frame.add(p1Symbol);
        frame.add(player2);
        frame.add(p2Name);
        frame.add(p2Symbol);
        frame.add(name1);
        frame.add(name2);
        frame.add(begin);
        frame.add(buttons);
        frame.add(p1K);
        frame.add(p1Z);
        frame.add(p2K);
        frame.add(p2Z);

        /*  u need to add a dummy label also to let GUI work correctly, dont know whyx !
        frame.add(dummy); */
    }
    public static void main(String...args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new ZeroKata();
            }
        });
    }
}

这是一个简单的代码,我只是不知道我哪里出错了。提前致谢 !

4

2 回答 2

1

我的问题是我最后添加的任何组件,在框架中都不可见,或者扭曲了整个 GUI。我的代码会更好地解释这一点

  • 您将JComponents 添加到已经可见的 s 中JFrame

  • 移动frame.setVisible(true);到最后一行代码,毕竟都JComponents被添加了

  • Swing GUI 应该在初始线程上启动

于 2013-11-08T08:06:43.737 回答
1

默认布局管理器是一个BorderLayout(参见JFrame概述),将其设置null为允许绝对定位:

frame.setLayout(null);
于 2013-11-08T08:04:23.023 回答