这是我的第一个Java项目,所以我很遗憾地问我确定是一个明显的答案。我一直在搜索谷歌和每本书,我可以得到我的手,但有些我是如何错过它...
我正在创建一个项目,其中包括第一类中的四个内部框架。我希望每个内部框架都能从其他类中获取内容(而不是将所有内容分组到主类中。代码看起来非常草率,最终只有几百行。导航太多了。这应该是关注或我是否太乏味?)。
无论如何,这是我的主类(称为Main)的GUI:
private static void createAndShowGUI() {
frame = new JFrame("Perceptum");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setJMenuBar(createMenuBar());
desk = new JDesktopPane();
frame1 = new JInternalFrame("Notepad", true, true, true, true);
frame1.setBounds(0, 0, 1088, 500);
frame1.getContentPane().setLayout(new BorderLayout());
frame1.setDefaultCloseOperation(HIDE_ON_CLOSE);
frame1.setVisible(true);
frame2 = new JInternalFrame("Research", true, true, true, true);
frame2.setBounds(1089, 0, 265, 670);
frame2.getContentPane().setLayout(new BorderLayout());
frame2.setVisible(true);
frame3 = new JInternalFrame("Share", true, true, true, true);
frame3.setBounds(790, 500, 300, 170);
frame3.getContentPane().setLayout(new BorderLayout());
frame3.setVisible(true);
frame4 = new JInternalFrame("References", true, true, true, true);
frame4.setBounds(0, 500, 790, 170);
frame4.setVisible(true);
desk.add(frame1);
desk.add(frame2);
desk.add(frame3);
desk.add(frame4);
frame.add(desk);
frame.setSize(1370, 730);
frame.setVisible(true);
}
我想将课程Notepad
,References
,Research
和Share
放入第1-4帧。我尝试过使用:
Notepad notes = new Notepad();
frame1.getContentPane().add(notes);
也:
frame1.setContentPane(notes)
和类似的变化。这让我疯狂。谢谢你的帮助!
答案 0 :(得分:1)
尝试将用于创建每个帧的代码分解为一个然后返回该帧的方法。这将代码分解为可读部分。你可以使用每帧一个类,但这是过度的,除非框架中有很多独特的东西。
private JInternalFrame frame1 = null;
...
private JInternalFrame getFrame1() {
if (frame1 == null) {
frame1 = new JInternalFrame("Notepad", true, true, true, true);
frame1.setBounds(0, 0, 1088, 500);
frame1.getContentPane().setLayout(new BorderLayout());
// TODO: Add code to fill in the contents by calling getXxx()
// for each major contained component OR just creating all the
// minor bits that go inside.
frame1.setDefaultCloseOperation(HIDE_ON_CLOSE);
frame1.setVisible(true);
}
return frame1;
}
然后在您在问题中显示的方法中使用以下行:
desk.add(getFrame1());
答案 1 :(得分:0)
JFrame是一个顶级组件。一个主窗口。您无法将主窗口添加到JInternalFrame。这就是堆栈跟踪所说的:
java.lang.IllegalArgumentException:向容器添加窗口
向容器添加窗口是违法的。
记事本和其他类应该扩展JPanel,而不是JFrame。 JPanel是一个可以添加到JInternalFrame的组件。
要学习的课程:即使错误信息对您没有意义,它也包含有价值的信息。如果您不发布,我们不知道问题是什么。代码还包含有价值的信息。如果你不发布它,我们不知道它的作用。