首页 > 解决方案 > 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();

}

}

标签: javaswingjframelayout-manager

解决方案


add(controlPanel,SOUTH);

所有的行都应该有错误。我不确定为什么这是唯一突出显示的。代码应该是:

add(controlPanel, BorderLayout.SOUTH);

首选的约束是使用:BorderLayout.PAGE_END. 阅读 Swing 教程中有关如何使用 BorderLayout的部分以获取更多信息和工作示例。

此外,没有理由将框架传递给构造函数中的面板。如果由于某种原因您需要知道面板的框架,您可以SwingUtiltites.windowForComponent(…)在框架可见后调用该方法。


推荐阅读