我的JPanels没有显示,因为我想要它们

时间:2011-11-14 16:54:38

标签: java swing user-interface jpanel layout-manager

我试图让我的应用程序看起来像这样:

How i want my application to look

但是当我试图做到这一点时我得到这样的东西: How my application looks

这是我用来创建我的两个JPanels的代码,以及我如何添加按钮和soo ..

//This is the panel that shows the image
appletRunningPanel = new ImagePanel();
appletRunningPanel.setSize(600, 300);
appletRunningPanel.validate();

//This is the panels that shows the 3 buttons
appletRunningPanel2 = new Panel(new GridLayout(1, 3));
appletRunningPanel2.setSize(600, 300);
appletRunningPanel2.add(test1);
appletRunningPanel2.add(test2);
appletRunningPanel2.add(test3);
appletRunningPanel2.validate();

//Then i add them to the applet with this:
add(appletRunningPanel);
add(appletRunningPanel2);

以下是ImagePanel的代码

public class ImagePanel extends JPanel{

    private BufferedImage image;

    public ImagePanel() {
        setSize(600, 300);
        try {                
           image = ImageIO.read(getClass().getResourceAsStream("/res/TCHLogo.png"));
        } catch (IOException ex) {
             // handle exception...
            System.out.println(ex);
        }
     }

     @Override
     public void paintComponent(Graphics g) {
         super.paintComponent(g);
         g.drawImage(image, 0, 0, null);
     }

}

3 个答案:

答案 0 :(得分:2)

GridLayout将拉伸每个单元格中的组件以适合单元格的大小,如果要避免此拉伸,则将按钮添加到另一个面板并将该面板添加到GridLayout

根据我的经验,用Java构建用户界面就是混合和匹配布局管理器以实现您的总体目标。那里有一些简化的经理,如Mig Layout

对于你的例子,我会做这样的事情:

+----------------------------------------+
| panel1                                 |
|+--------------------------------------+|
|| panel2                               ||
|+--------------------------------------+|
+----------------------------------------+
+----------------------------------------+
| panel3                                 |
|+-----------++-----------++------------+|
|| panel4    || panel5    || panel6     ||
|+-----------++-----------++------------+|
+----------------------------------------+
  • panel1BorderLayout
  • panel2是您的ImagePanel,并通过panel1
  • 添加到panel1.add(panel2, BorderLayout.CENTER);
  • panel3是您的GridLayout
  • panel4panel5panel6都是默认值(FlowLayout),这些JPanel中的每一个都将包含您的三个按钮之一。< / LI>

然后,您可以将其布局设置为BorderLayout并通过panel1getContentPane().add(panel1, BorderLayout.NORTH);通过panel3 getContentPane().add(panel3, BorderLayout.SOUTH);,将其添加到内容窗格>

它并不完美,但它会让你看起来更干净。您可以添加更多内容以使事物看起来更漂亮。我最喜欢的布局管理员之一是BoxLayout

答案 1 :(得分:1)

您需要更好地了解布局管理器。浏览this handy guide并选择适合您需要的布局管理器。

在底部面板上,GridLayout不考虑组件的首选大小(JButtons),它使用网格部分中的所有可用空间。

您可能需要为每个面板使用不同的布局管理器,并为您的applet框架再使用另一个布局管理器。

答案 2 :(得分:0)

尝试添加中间JPanel 即

JPanel appletRunningPanel2Wrapper = new JPanel();
appletRunningPanel2Wrapper.add(appletRunningPanel2);
add(appletRunningPanel2Wrapper);