作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在一帧内添加两个面板,我想要右侧的一些按钮和文本字段来编辑绘图面板类,但我不知道如何将 GUI 组件添加到 panel2
。每当我尝试将 GUI 组件添加到 panel2
时,它无法正常工作,我不明白为什么。
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("WaferMap");
frame.setSize(1286, 829);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setVisible(true);
Container contentPane = frame.getContentPane();
contentPane.setLayout(new BorderLayout());
DrawingPanel panel1 = new DrawingPanel();
JPanel panel2 = new JPanel();
frame.add(panel1, BorderLayout.WEST);
panel1.setPreferredSize(new Dimension(1080, 800));
final JButton button = new JButton();
panel2.add(button, BorderLayout.EAST);
button.setBounds(50,50,100,50);
frame.add(panel2, BorderLayout.EAST);
panel2.setPreferredSize(new Dimension(200, 800));
}
}
这是主要的,我还有另一个类,名为 drawingPanel
与 paintComponent
在里面。
最佳答案
不要使用 setPreferredSize()。布局管理器的工作是根据布局管理器的规则和添加到面板的组件的首选尺寸来计算面板的首选尺寸。
不要使用 setSize()。而是使用 pack()。框架的大小将根据添加到框架的所有组件的首选大小进行调整。
真正的问题是,默认情况下组件的大小为 (0. 0),因此没有任何内容可绘制。布局管理器的工作是为组件提供尺寸/位置。问题是您在将组件添加到面板之前使框架可见,因此布局管理器从未被调用。因此,解决方案是应在将所有组件添加到框架后调用 pack()
和 setVisible(true)
语句。
请注意,本教程还有关于自定义绘画
的部分,您应该阅读该部分,以便正确实现绘画,以确保您的DrawingPanel
具有首选尺寸。
关于java - 如何在一帧内添加GUI面板和DrawPanel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62451270/
当我尝试将实例“panel”添加到 JFrame 的构造函数中时,出现空指针异常。然而,真正的问题是,如果不向 JFrame 添加“面板”,我的 borderlayout 的北布局工作正常,添加它后,
我是一名优秀的程序员,十分优秀!