eclipse 按钮占据整个屏幕

2wnc66cl  于 2023-06-22  发布在  Eclipse
关注(0)|答案(4)|浏览(195)
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class box{
    public static String b1state = "A";
    public static String b2state = "S";
    public static String b3state = "D";
    public static String b4state = "F";
    public static String b5state = "G";
    public static String b6state = "H";
    public static String b7state = "J";
    public static String b8state = "K";
    public static String b9state = "Q";

    public static void main(String[] args){
        JFrame frame = new JFrame("Tic Tac Toe");
        frame.setSize(500,500);
        frame.setResizable(false);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel p = new JPanel();

        JButton b1 = new JButton(b1state);
        b1.setLocation(100,  50);
        JButton b2 = new JButton(b2state);
        b2.setLocation(150, 50);
        JButton b3 = new JButton(b3state);
        b3.setLocation(200, 50);
        JButton b4 = new JButton(b4state);
        b4.setLocation(100, 100);
        JButton b5 = new JButton(b5state);
        b5.setLocation(150, 100);
        JButton b6 = new JButton(b6state);
        b6.setLocation(200, 100);
        JButton b7 = new JButton(b7state);
        b7.setLocation(100, 150);
        JButton b8 = new JButton(b8state);
        b8.setLocation(150, 150);
        JButton b9 = new JButton(b9state);
        b9.setLocation(200, 150);

        b1.setSize(50, 50);
        b2.setSize(50, 50);
        b3.setSize(50, 50);
        b4.setSize(50, 50);
        b5.setSize(50, 50);
        b6.setSize(50, 50);
        b7.setSize(50, 50);
        b8.setSize(50, 50);
        b9.setSize(50, 50);

        p.add(b1);
        p.add(b2);
        p.add(b3);
        p.add(b4);
        p.add(b5);
        p.add(b6);
        p.add(b7);
        p.add(b8);
        p.add(b9);

        frame.add(p);
        frame.add(b1);
        frame.add(b2);
        frame.add(b3);
        frame.add(b4);
        frame.add(b5);
        frame.add(b6);
        frame.add(b7);
        frame.add(b8);
        frame.add(b9);
    }

当我运行这个有时它的工作,但其他时候它只是打开窗口与整个按钮占用屏幕!请救救我!

drnojrws

drnojrws1#

1.一个组件只能驻留在一个父容器中,将一个组件添加到另一个容器中将从第一个容器中删除它,所以基本上,没有任何东西驻留在您的JPanel中了。
1.默认情况下,JFrame使用BorderLayout,这意味着只有一个组件可以占用它提供的五个可用空间中的任何一个。你的代码发生了什么,b9,是最后一个添加到框架中的组件,是唯一显示的组件。BorderLayoutb9提供了全部可用空间。
首先看看Laying Out Components Within a Container。为了实现您想要的,您可能需要使用多个布局,但是这允许您分离职责,隔离界面每个部分的单独需求

gab6jxml

gab6jxml2#

替换如下:

JPanel p = new JPanel();

其中:

JPanel p = new JPanel(new GridLayout(3, 3));

还有这个

frame.add(p);
    frame.add(b1);
    frame.add(b2);
    frame.add(b3);
    frame.add(b4);
    frame.add(b5);
    frame.add(b6);
    frame.add(b7);
    frame.add(b8);
    frame.add(b9);

用这个:

frame.setContentPane(p);

这将使你的代码“工作”。但是您必须更多地使用容器来学习如何“布局”组件。我建议你:http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

aelbi1ox

aelbi1ox3#

我有一个问题,就像这样,如果它的最后一个按钮,填补您的窗口,你可以“作弊”添加另一个按钮在您的代码结束,然后禁用他,使他隐形像这样。cheater.setVisible(false); cheater.setEnabled(false);

knsnq2tg

knsnq2tg4#

您也可以通过将布局设置为null来修复此问题,因此panel.setLayout(null);

相关问题