【发布时间】:2020-02-05 08:39:39
【问题描述】:
我似乎无法在线找到解决方案,说明为什么我在尝试运行时遇到此错误
我正在为不同的程序制作一个简单的测试系统,当按钮按下时会在文本框中产生值。我希望它们位于不同的行以使其更清洁,因此我研究了布局。我认为 Box Layout 最适合我。在尝试此操作之前,我查看了不同的示例,我的代码最终看起来像这样,(为凌乱的代码道歉)
更新
让盒子布局错误消失,但代码不会将它们放在面板/框架上。当文本字段变得非常大时,标签和按钮左对齐。我不需要这样做
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import static javax.swing.BoxLayout.Y_AXIS;
import static javax.swing.SwingConstants.CENTER;
public class button extends JFrame {
static JFrame f;
static JButton b;
static JLabel l;
// main class
public static void main(String[] args)
{
// create a new frame to stor text field and button
f = new JFrame("panel");
BoxLayout layout = new BoxLayout(f, BoxLayout.Y_AXIS);
f.setLayout(layout);
// create a label to display text
l = new JLabel("panel label");
b = new JButton("button1");
JTextField textArea = new JTextField(5);
textArea.setEditable(false);
//textArea.append("Hello World");
// create a panel to add buttons
JPanel p = new JPanel();
// add buttons and textfield to panel
f.add(p);
f.setSize(300, 300);
p.add(l);
p.add(b);
p.setBackground(Color.white);
p.add(textArea);
f.show();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Random r = new Random();
textArea.setText(String.valueOf(r));
}
});
}
}
Error
Exception in thread "main" java.awt.AWTError: BoxLayout can't be shared
at java.desktop/javax.swing.BoxLayout.checkContainer(BoxLayout.java:461)
at java.desktop/javax.swing.BoxLayout.invalidateLayout(BoxLayout.java:245)
at java.desktop/javax.swing.BoxLayout.addLayoutComponent(BoxLayout.java:278)
at java.desktop/java.awt.Container.addImpl(Container.java:1152)
at java.desktop/java.awt.Container.add(Container.java:1029)
at java.desktop/javax.swing.JFrame.addImpl(JFrame.java:553)
at java.desktop/java.awt.Container.add(Container.java:436)
at button.main(button.java:36)
我希望将这三件物品一个一个叠放在另一个上面,并在它们之间留出空间。顺序现在无关紧要。
【问题讨论】:
-
你说你“得到这个错误”;但并不完全清楚“这个错误”是什么。请澄清。
-
将
BoxLayout设置为JPanel、p 的布局管理器,而不是JFrame -
我查看了不同的示例 - 示例的最佳来源是 Oracle Swing Tutorial,将所有 Swing 基础知识集中在一个地方。
How to Use BoxLayout部分有工作代码供您下载和测试。这段代码应该是起点,因为它还展示了一种更好的代码结构方式。例如,您不应该 1) 扩展 JFrame 2) 使用静态变量。您应该 1) 在事件调度线程上创建 GUI。
标签: java swing layout-manager boxlayout