Java Swing-无法使用Border Layout正确显示内容,还会出现非法的组件位置错误

问题描述 投票:0回答:2

我只是编写了一个简单的代码,我希望在JFrame的CENTER中显示一个画布,并在同一JFrame的NORTH中显示一个配置面板。但是,在添加它们之后,'canvas'都不会显示在全部。如果仅添加画布,则不会显示它,但是一旦添加配置面板,就不会显示它。

此外,如果我尝试在同一JFrame的SOUTH中添加其他内容,无论如何我都会收到非法的组件位置错误。

关于Swing,我是一个完全菜鸟,很抱歉,答案很明显,但我尝试了Google搜寻,并在最近的几个小时里对此进行了研究,但没有任何运气。

这是我尝试过的:

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();

}

}
java swing jframe layout-manager
2个回答
0
投票
add(controlPanel,SOUTH);

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

add(controlPanel, BorderLayout.SOUTH);

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

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


0
投票

请尝试用getContentPane().add(controlPanel, SOUTH);代替add(controlPanel, SOUTH);

对您提供的代码中的每个组件执行此操作...

© www.soinside.com 2019 - 2024. All rights reserved.