Java 我的JPanels没有';i don’我不想让他们出现

Java 我的JPanels没有';i don’我不想让他们出现,java,swing,user-interface,jpanel,layout-manager,Java,Swing,User Interface,Jpanel,Layout Manager,我试图使我的应用程序看起来像这样: +----------------------------------------+ | panel1 | |+--------------------------------------+| || panel2 || |+--------------------------------------+| +----------------

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

+----------------------------------------+
| panel1                                 |
|+--------------------------------------+|
|| panel2                               ||
|+--------------------------------------+|
+----------------------------------------+
+----------------------------------------+
| panel3                                 |
|+-----------++-----------++------------+|
|| panel4    || panel5    || panel6     ||
|+-----------++-----------++------------+|
+----------------------------------------+

但当我尝试做这件事时,我会得到这样的结果:

下面是我用来创建两个JPanel的代码,以及如何添加按钮和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);
     }

}

尝试添加一个中间JPanel i、 e


您需要更好地理解布局管理器。仔细查看并选择适合您需要的布局管理器

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


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

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

根据我的经验,用Java设计一个用户界面就是混合和匹配布局管理器,以实现您的总体目标。有一些简化的管理者,比如

例如,我会这样做:

+----------------------------------------+
| panel1                                 |
|+--------------------------------------+|
|| panel2                               ||
|+--------------------------------------+|
+----------------------------------------+
+----------------------------------------+
| panel3                                 |
|+-----------++-----------++------------+|
|| panel4    || panel5    || panel6     ||
|+-----------++-----------++------------+|
+----------------------------------------+
  • panel1
    有一个
  • panel2
    是您的
    ImagePanel
    并通过
    panel1.add(panel2,BorderLayout.CENTER)添加到
    panel1
  • panel3
    是您的
    GridLayout
  • panel4
    panel5
    panel6
    都是默认设置(
    FlowLayout
    ),每个
    JPanel
    都包含三个按钮中的一个
然后,您可以通过将其布局设置为
BorderLayout
并通过
getContentPane().add(panel1,BorderLayout.NORTH)添加
panel1
将其添加到内容窗格中
panel3
通过
getContentPane()添加(panel3,BorderLayout.SOUTH)


它并不完美,但会让你看起来更干净。为了让事情看起来更美好,你可以添加更多内容。我最喜欢的布局管理器之一是。

1)将JButtons添加到包含Image?的JPanel中,2)您是否希望调整图像的大小+1发布创意无需创建6个不同的面板。只要两个就行了。首先创建图像面板,然后创建按钮面板。这只是让人困惑的事情。