JAVA布局情况

JAVA布局情况,java,swing,Java,Swing,所以我把JFrame设置为全尺寸 temp.setExtendedState(JFrame.MAXIMIZED_BOTH); 我添加了3个面板(borderlayout),在panel1中,我使用JLabel显示图像: img.getScaledInstance(600, 400, Image.SCALE_SMOOTH); 面板2相同,面板3只是一些按钮。 (我不会在这里发布全部代码),但这段代码运行得很好。 现在我想做的是: Jframe是全尺寸的,panel1占45%,

所以我把JFrame设置为全尺寸

temp.setExtendedState(JFrame.MAXIMIZED_BOTH); 
我添加了3个面板(borderlayout),在panel1中,我使用JLabel显示图像:

img.getScaledInstance(600, 400,
        Image.SCALE_SMOOTH);
面板2相同,面板3只是一些按钮。 (我不会在这里发布全部代码),但这段代码运行得很好。 现在我想做的是: Jframe是全尺寸的,panel1占45%,panel2占45%,panel3占10%。 如果我给dsiplay的图片太大,无法容纳45%,那么它会被缩放以适应45%的JFrame,如果它比刚刚显示的小。有什么想法吗

你可以用Darryl的。这是一个
图标
您可以添加到
JLabel
,然后将
JLabel
添加到您的
JPanel

收缩图标的工作原理如下:

  • 如果没有足够的空间显示图像,则会缩小图像
  • 如果有足够的空间,则图像将位于可用空间的中心
  • 我们不会硬编码组件的空间分配。我们让每个组件占用它所需要的空间。因此,对于主布局,您将使用框架的边界布局

    您将使用以下选项:

    JPanel controls = new JPanel();
    controls.add(...);
    frame.add(controls, BorderLayout.PAGE_END);
    
    然后,您将为图像创建第二个面板:

    JPanel images = new JPanel( new GridLayout(0, 1) );
    images.add( new JLabel(...) );
    images.add( new JLabel(...) );
    frame.add(images, BorderLayout.CENTER)
    

    现在,图像面板将随着帧大小的变化而增大/缩小,标签也将根据可用空间的大小而增大/缩小。

    您的意思是希望在容器大小变化时调整图像的大小吗?可能会有帮助。您好,我会查看它,但只是解释一下:首先,我想把JFrame的全尺寸分为:45%,45%,10%,所以你看到一张图片,下面是另一张图片,在底部有一些按钮(10%)。如果图片太大,无法容纳45%,它会被缩放如果它正常,那么它只是显示出来,或者我可以这样说:容器Jpanel1的大小始终是Jframe的45%,jpanel2也是。Jframe始终为全尺寸。现在我想让这张照片适合45%的人。是的;像这样:我想在同一时间显示2张尽可能大的图片,下面有一些控件(按钮),这就是“如果需要的话,图像会缩小,以适应组件的范围”;好的,这样可以工作,但是如何使组件Jpanel1占据全尺寸Jframe的45%,我明天去看看,然后告诉你,谢谢你的帮助