我只是编写了一个简单的代码,我希望在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();
}
}
add(controlPanel,SOUTH);
所有行都应该有错误。我不确定为什么这是唯一突出显示的内容。该代码应为:
add(controlPanel, BorderLayout.SOUTH);
首选约束是使用:BorderLayout.PAGE_END
。阅读有关How to Use BorderLayout的Swing教程中的部分,以获得更多信息和工作示例。
而且,没有理由将框架传递给构造函数中的面板。如果由于某种原因需要了解面板的框架,则可以在该框架可见后调用SwingUtiltites.windowForComponent(…)
方法。
请尝试用getContentPane().add(controlPanel, SOUTH);
代替add(controlPanel, SOUTH);
对您提供的代码中的每个组件执行此操作...