当前位置: 首页 > 知识库问答 >
问题:

JButtons消失了

苏晓博
2023-03-14

我是一个编程初学者,我试图创建一个计算器,我刚刚开始大约1到2个小时前,但我遇到了一个问题,我的所有jbutton都消失了。请帮助,我已经尝试了这么长时间,我只是不知道我的代码有什么问题。

公共类主{

static void gui() {

    JPanel p = new JPanel();

    JFrame f = new JFrame("Calculator");
    f.add(p);
    f.setLayout(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setTitle("YEET");
    f.pack();
    f.setSize(1930, 1090);

    JButton b0 = new JButton("0");
    JButton b1 = new JButton("1");
    JButton b2 = new JButton("2");
    JButton b3 = new JButton("3");
    JButton b4 = new JButton("4");
    JButton b5 = new JButton("5");
    JButton b6 = new JButton("6");
    JButton b7 = new JButton("7");
    JButton b8 = new JButton("8");
    JButton b9 = new JButton("9");

    b0.setBackground(new Color(156,207,245));

    b1.setBackground(new Color(156,207,245));
    b2.setBackground(new Color(156,207,245));
    b3.setBackground(new Color(156,207,245));

    b4.setBackground(new Color(156,207,245));
    b5.setBackground(new Color(156,207,245));
    b6.setBackground(new Color(156,207,245));

    b7.setBackground(new Color(156,207,245));
    b8.setBackground(new Color(156,207,245));
    b9.setBackground(new Color(156,207,245));


    p.setLayout(null);
    p.add(b1);

    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);

    b0.setVisible(true);

    b1.setVisible(true);
    b2.setVisible(true);
    b3.setVisible(true);

    b4.setVisible(true);
    b5.setVisible(true);
    b6.setVisible(true);

    b7.setVisible(true);
    b8.setVisible(true);
    b9.setVisible(true);



    p.setVisible(true);

    f.setVisible((true));

}

public static void main(String[] args) {

            gui();

}

}`

共有1个答案

邓宜年
2023-03-14

null布局是个坏主意。“像素完美”布局是一种幻觉。花时间学习如何使用布局管理API。有关更多详细信息,请参见在容器中布局组件

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Test {

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

    public Test() {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private JButton b0 = new JButton("0");
        private JButton b1 = new JButton("1");
        private JButton b2 = new JButton("2");
        private JButton b3 = new JButton("3");
        private JButton b4 = new JButton("4");
        private JButton b5 = new JButton("5");
        private JButton b6 = new JButton("6");
        private JButton b7 = new JButton("7");
        private JButton b8 = new JButton("8");
        private JButton b9 = new JButton("9");

        public TestPane() {
            setLayout(new GridBagLayout());

            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridy = 3;
            gbc.gridx = 0;
            gbc.weightx = 1;
            gbc.fill = gbc.BOTH;
            gbc.gridwidth = 3;

            add(b0, gbc);

            JButton[] buttons = new JButton[]{
                b7, b8, b9,
                b4, b5, b6,
                b1, b2, b3
            };
            int row = 0;
            int col = 0;
            gbc = new GridBagConstraints();
            gbc.fill = gbc.BOTH;
            gbc.weightx = 0.3;
            for (JButton btn : buttons) {
                gbc.gridx = col;
                gbc.gridy = row;
                add(btn, gbc);

                col += 1;
                if (col > 2) {
                    row++;
                    col = 0;
                }
            }
        }


    }

}

或者,如果GridBagLayout是少到多,则使用多个,例如BorderLayoutGridLayout

import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Test {

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

    public Test() {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private JButton b0 = new JButton("0");
        private JButton b1 = new JButton("1");
        private JButton b2 = new JButton("2");
        private JButton b3 = new JButton("3");
        private JButton b4 = new JButton("4");
        private JButton b5 = new JButton("5");
        private JButton b6 = new JButton("6");
        private JButton b7 = new JButton("7");
        private JButton b8 = new JButton("8");
        private JButton b9 = new JButton("9");

        public TestPane() {
            setLayout(new BorderLayout());

            add(b0, BorderLayout.SOUTH);

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

            JButton[] buttons = new JButton[]{
                b7, b8, b9,
                b4, b5, b6,
                b1, b2, b3
            };
            for (JButton btn : buttons) {
                innerPane.add(btn);
            }

            add(innerPane);
        }

    }

}
 类似资料:
  • 我是GUI的初学者。 有没有一种快速的方法可以将同一个按钮/图像设置到GUI中的多个位置?为了更好地说明,如果我想在GUI中的不同位置使用这个JButton 10次,我需要创建一个新的JButton(new ImageIcon…)10次? 按钮不一定会导致任何事情,这只是为了展示。

  • 本文向大家介绍梯度消失相关面试题,主要包含被问及梯度消失时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 在神经网络中,当前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。这种现象叫做消失的梯度问题。

  • 我现在正在试着做一个数独网格。因此,我使用了两个数组(双维),一个数组包含所有的JButtons,另一个数组包含9个JPanels。我在每个JPanel中放置了9个按钮,我在每个JPanel中使用了(3,3)的GridLayout,所有的JPanel都在一个更大的JPanel中,它也使用了GridLayout。问题是按钮在窗口的底部,所以不是所有的按钮都显示出来。我为第一个JPanel(包含前9个

  • 我正在为一个项目做一个国际象棋游戏,我想做的第一件事就是创建一个框架,然后用64个JButtons(8x8组织)填充它,每个JButtons将作为国际象棋棋盘上的方块。我对Java还是一个新手,但我仍然不认为我应该得到我得到的错误,它没有发生在一段时间之前,但也就是说,当帧加载之前,没有一个JButtons。 当我使用3D数组向我的JButtons添加坐标时,我似乎遇到了一个问题,我不断得到错误“

  • 我已经做了一个消失插件,但我有麻烦使它,所以服务器管理员可以看到的人,当他们在消失。我想这样做,如果他们得到允许,他们可以看到人们消失。

  • andriod新手,正在尝试设置视图。基于共享偏好而消失。然而,它并没有消失!我打碎了什么?! 编辑 所以,在测试了下面的问题是设置没有正确完成之后...因此,现在已经修复了这个问题,让我们再试一次。他是我的 onCreate...当我删除textview临时代码时,它工作正常,并通过Toast显示pref中的更改,但是当代码在那里时,应用程序崩溃了。 他是XML供参考: 编辑@daniel_c0