【发布时间】:2022-07-27 20:32:43
【问题描述】:
当我试图运行我的程序时,它总是一个错误。 5 个 JButton 没有出现在 MainFrame 的西部(左侧)。我为 JButtons 使用了 BoxLayout,以便它可以从上到下显示,并将 FirstPanel 类调用到 MainFrame,以便我可以将它定位在西侧。它应该是这样的,但我的应用程序没有运行。请帮助我如何实现这一目标
MainFrame.java
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();
}
}
第一面板.java
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)
-
你读过关于布局的官方挥杆教程吗? docs.oracle.com/javase/tutorial/uiswing/layout/box.html
-
但我的应用程序没有运行方法?你得到一个错误还是什么?
-
minimal reproducible example 请 .. 确保该示例是最小的、可编译的和可按原样运行的。显示的代码无法编译 - 用普通的 JLabel 替换不相关的(所以正确地省略了!)TitlePane。
-
@kleopatra 是的,这是我的问题,它没有运行,因为它有错误。我已经编辑了我的帖子并包含了我得到的错误
-
您在构造函数中调用
FirstPanel的构造函数,这给了您无限递归。fp = new FirstPanel();-->fp = this;
标签: java swing layout-manager boxlayout