2013-03-17 84 views
0

我有一个2 JPanels,1个按钮面板和一个图形面板。我希望按钮面板位于图形面板的正下方,但按钮面板会切断中间的图形面板。我一直在尝试从讨论中看来似乎是我尝试做的最好的格式。任何人都可以给我一些关于格式问题的建议。JPanel格式问题

JFrame canvas = new JFrame("Baseball Strike K"); 


    JFrame canvas = new JFrame ("GraphicBoard"); 
     canvas.setVisible(true); 
     canvas.setSize(1000,1000); 
     canvas.setDefaultCloseOperation(EXIT_ON_CLOSE); 
//create two panels 
//add them to contentPane 

//set Layout 
     JPanel buttonPanel = createButtons(); 
     JPanel mainPanel = new Graphic(); //extends JPanel and writes the paint method 
     mainPanel.setSize(1000, 1000); 

     Container content = canvas.getContentPane(); 
     content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); 
     content.add(mainPanel); 
     content.add(buttonPanel); 
+1

代码不足。至少需要查看Graphic和createButtons。可运行的示例也会非常有用 – MadProgrammer 2013-03-17 20:06:11

+0

查看Eclipse IDE中的WindowBuilder。你不会回头。 – Java42 2013-03-17 20:09:39

+1

1)为了更好地提供帮助,请发布[SSCCE](http://sscce.org/)。 2)参见[使用多个JFrames,好/坏实践?](http://stackoverflow.com/a/9554657/418556)3)'扩展JPanel并写入paint方法'应该是'.. paintComponent方法' – 2013-03-17 20:30:39

回答

1
mainPanel.setSize(1000, 1000); 

布局经理的工作是确定组件的大小,所以你永远不会调用组件的setSize()方法。

相反,您应该向布局管理器提示大小应该是多少。您可以通过覆盖getPreferredSize()方法来返回适当的值来完成此操作。另外,我会选择一个更合理的尺寸(1000,1000)在大多数屏幕上显示都有点大。如果你真的想要你的绘画区域这么大,那么我会将画板添加到JScrollPane,然后将该画板添加到框架。

尝试让您的代码使用BoxLayout工作。然后我会建议一个更好的布局管理器将使用BorderLayout。然后,您将油漆面板添加到CENTER,并将按钮添加到SOUTH。现在,当您调整框架的大小时,油漆面板的大小将会调整。

canvas.setVisible(true); 

此外,该行代码的位置是错误的。在使框架可见之前,您应该先将所有组件添加到框架。