Java JPanel如何设置固定大小

12

我想要一个可调整大小的面板,其中顶部绿色面板始终具有固定深度。也就是说,所有高度变化应仅影响黄色面板。

我的代码几乎可以,除了绿色面板的大小会有些变化。

我该怎么做?

            Panel.setLayout(new BoxLayout(Panel, BoxLayout.Y_AXIS));
        Panel.setAlignmentX(Component.LEFT_ALIGNMENT);

        JPanel TopPanel = new JPanel();
        TopPanel.setPreferredSize(new Dimension(80,150));
        TopPanel.setVisible(true);
        TopPanel.setBackground(Color.GREEN);
        JPanel MainPanel = new JPanel();
        MainPanel.setPreferredSize(new Dimension(80,750));
        MainPanel.setVisible(true);
        MainPanel.setOpaque(true);
        MainPanel.setBackground(Color.YELLOW);

        Panel.add(TopPanel);
        Panel.add(MainPanel);

在此输入图片描述

2个回答

14

您的问题没有限制解决方案为BoxLayout,因此我建议使用不同的布局管理器。

我会使用BorderLayout来解决这个问题,并将绿色面板放在PAGE_START位置。然后将黄色面板放在CENTER位置,不需要调用preferredSize

http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html

以下是解决方案的SSCCE示例:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestPad extends JFrame {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.getContentPane().setLayout(new BorderLayout());

        JPanel green = new JPanel();
        green.setPreferredSize(new Dimension(80, 150));
        green.setBackground(Color.GREEN);

        JPanel yellow = new JPanel();
        yellow.setBackground(Color.YELLOW);

        frame.getContentPane().add(green, BorderLayout.PAGE_START);
        frame.getContentPane().add(yellow, BorderLayout.CENTER);

        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}

请查看gla3dr的评论。 - ManInMoon
@ManInMoon,对我来说很好用,我已经编辑了我的答案并提供了一个完整的示例。你可能在做某些不同的事情。 - jzd
+1。这帮助我解决了一个问题,原本我在VerticalBox中有3个组件,对其中一个的更改会导致所有3个组件的大小都发生变化。现在,由于使用了BorderLayout,对一个组件的更改不会影响其他组件的大小。 - James Birch

3
如果您让您的Panel使用BorderLayout而不是BoxLayout,并将TopPanel放置在BorderLayout.NORTH中,将MainPanel放置在BorderLayout.CENTER中,那么它们都会水平调整大小,但只有MainPanel会垂直调整大小。
请查看BorderLayout文档

这似乎不正确,绿色和黄色面板相对高度保持不变,但绿色会增长和缩小 - 我希望能够固定它的高度。 - ManInMoon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接