jbutton并没有出现在应用程序的西侧

2022-10-15 07:54:19标签javaswinglayout-managerboxlayout
提问

当我试图运行我的程序时,它总是一个错误。5个jbutton没有出现在主机的西(左)。我使用了jbutton的BoxLayout,这样它可以从上到下显示,并将第一个面板类称为主机,这样我就可以把它放在西侧。应该是这样的,但我的应用程序没有运行。请帮助我如何实现这一点 主框架 FirstPanel。java 这就是我得到的错误 最好是先调用包,然后使JFrame可见。 也主要使用: 或者我喜欢的: 这确保了正确的线程。 错误是在FirstPanel内部有一个FirstPanel fp。这是一个无休止的嵌套对象。因此从未完全创造。 一个人也经常看到一个匿名的JPanel到一个变量并使用它。在一个没有名字的例子中,比如“FirstPanel”,这是有道理的。然而,“ButtonPanel”或这样是可以的。

public class MainFrame extends JFrame {
    TitlePanel title;
    FirstPanel first;
    public MainFrame() {
        title = new TitlePanel();
        add(title, BorderLayout.NORTH);
        first = new FirstPanel();
        add(first, BorderLayout.WEST);
        setSize(5000,5000);
    setVisible(true);
    this.pack();
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
        new MainFrame();
    }
}

   public class FirstPanel extends JPanel {
   JButton b1;
   JButton b2;
   JButton b3;
   JButton b4;
   JButton b5;
   FirstPanel fp;
    public FirstPanel() {
       fp = new FirstPanel();
       BoxLayout layout = new BoxLayout(fp, BoxLayout.Y_AXIS);
       fp.setLayout(layout);
       b1 = new JButton();
       b2 = new JButton();
       b3 = new JButton();
       b4 = new JButton();
       b5 = new JButton();
       fp.add(b1);
       fp.add(b2);
       fp.add(b3);
       fp.add(b4);
       fp.add(b5);
    }
}

Exception in thread "main" java.lang.StackOverflowError
    at java.awt.Component.setFont(Component.java:1907)
    at java.awt.Container.setFont(Container.java:1753)
    at javax.swing.JComponent.setFont(JComponent.java:2748)
    at javax.swing.LookAndFeel.installColorsAndFont(LookAndFeel.java:208)
    at javax.swing.plaf.basic.BasicPanelUI.installDefaults(BasicPanelUI.java:66)
    at javax.swing.plaf.basic.BasicPanelUI.installUI(BasicPanelUI.java:56)
    at javax.swing.JComponent.setUI(JComponent.java:660)
    at javax.swing.JPanel.setUI(JPanel.java:153)
    at javax.swing.JPanel.updateUI(JPanel.java:126)
    at javax.swing.JPanel.<init>(JPanel.java:86)
    at javax.swing.JPanel.<init>(JPanel.java:109)
    at javax.swing.JPanel.<init>(JPanel.java:117)
    at FirstPanel.<init>(FirstPanel.java:26)
    at FirstPanel.<init>(FirstPanel.java:28)
回答

pack();
setVisible(true);

SwingUtilities.invokeLater(() -> new MainFrame());

SwingUtilities.invokeLater(() -> new MainFrame().setVisible(true));

   BoxLayout layout = new BoxLayout(this, BoxLayout.Y_AXIS);
   setLayout(layout);
   ...
   add(b1);

▼版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说cuoshuo.com——程序员的报错记录

部分内容根据CC版权协议转载,如果您希望取消转载请发送邮件到cuoshuo8@163.com

辽ICP备19011660号-5