java - Java Swing-无法使用Border Layout正确显示内容,还会出现非法组件位置错误
问题描述
我刚刚写了一个简单的代码,我希望画布出现在 JFrame 的中心,配置面板出现在同一个 JFrame 的北部。但是在添加它们之后,“画布”根本不会显示。如果我只添加画布,它会显示出来,但是一旦我添加了配置面板,它就不再显示了。
此外,如果我尝试在同一个 JFrame 的 SOUTH 中添加其他内容,无论如何都会出现非法组件位置错误。
当谈到 Swing 时,我完全是个菜鸟,如果答案很明显,我很抱歉,但我在过去的几个小时里尝试谷歌搜索和研究这个问题,但没有任何运气。
这是我尝试过的:
public class MainFrame extends JFrame {
ConfigPanel configPanel;
ControlPanel controlPanel;
DrawingPanel canvas;
public MainFrame() {
super("My Drawing Application");
init();
}
private void init() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
canvas = new DrawingPanel(this);
configPanel = new ConfigPanel(this);
controlPanel=new ControlPanel(this);
add(canvas,CENTER);
add(configPanel,NORTH);
add(controlPanel,SOUTH); //this gives me a illegal component position error
pack();
}
}
解决方案
add(controlPanel,SOUTH);
所有的行都应该有错误。我不确定为什么这是唯一突出显示的。代码应该是:
add(controlPanel, BorderLayout.SOUTH);
首选的约束是使用:BorderLayout.PAGE_END
. 阅读 Swing 教程中有关如何使用 BorderLayout的部分以获取更多信息和工作示例。
此外,没有理由将框架传递给构造函数中的面板。如果由于某种原因您需要知道面板的框架,您可以SwingUtiltites.windowForComponent(…)
在框架可见后调用该方法。
推荐阅读
- kubernetes - 在 GKE / Google Cloud 上安装 Istio
- postgresql - Postgres 漏斗分析(花费的时间)
- html - 如何在我绘制的这个框元素旁边获得一个列表?
- android - Android 9.+ 模拟器无法启动
- c# - 从 Windows Server Core 上的 WPF 应用程序浏览文件夹/文件对话框
- sql - 120K 条记录的 SQL 查询耗时 9 小时
- javascript - 从 DOM 元素和输入元素的值创建一个带有文本内容的对象?
- performance - Cassandra 在 AWS 上的性能下降
- r - 在 ggplot 中,在 x 轴和条形之间添加一些空间
- keras - 如何使用 Naive 或 Svm 而不是 tf-idf 和 count vectorizor 将 Word 应用于向量算法?