设置面板大小

7

我有三个面板。其中一个是主面板,它包含两个较小的面板。

对于主面板,我使用了

setPreferredSize(new Dimension(350, 190));

对于较小的左侧面板,我使用了
setPreferredSize(new Dimension(100, 190));

对于较小的右侧面板,我使用了

setPreferredSize(new Dimension(250, 190));

但是较小的面板大小保持不变。我该怎么解决这个问题?alt text 这是我在主面板中的代码。
import model.*;
import java.awt.*;
import javax.swing.*;

public class Panel extends JPanel
{

public Panel(Prison prison)
{
    setup();
    build(prison);
}

private void setup()
{
    setBorder(BorderFactory.createLineBorder(Color.blue));
    setLayout(new BorderLayout(1, 1));
    setPreferredSize(new Dimension(350, 190));
}

private void build(Prison prison)
{
    JTabbedPane tab = new JTabbedPane();       
    tab.addTab("Input", null, new InputPanel(), "Input");
    tab.addTab("Display", null, new DisplayPanel(), "Display");
    add(tab);            
}
}

你忽略了展示唯一相关的代码,即InputPanel的构建。 - Jonathan Feinberg
4个回答

10

不要这样做。

布局管理器的整个目的是允许动态调整大小,这不仅对于用户可调整大小的窗口,还包括更改文本(国际化)和不同的默认字体大小和字体都是必要的。

如果您正确地使用布局管理器,它们将负责面板大小。为了避免在用户增加窗口大小时使组件被拉伸到屏幕上四处分散,请使用一个最外层的左对齐FlowLayout作为其唯一子级的其余UI-这将给UI其首选大小,任何多余的部分都会填充背景颜色。


2

看起来你正在使用GridLayout或者FlowLayout,但这两种布局并不是你想要的。你可能需要使用BoxLayout,它会尊重组件的首选大小。

final JPanel p = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
p.add(leftPanel);
p.add(mainPanel);
p.add(rightPanel);

主面板是包含选项卡的面板,在输入选项卡下面有另外两个面板。对于主面板,我使用了边界布局(BorderLayout),而对于左右面板,我使用了网格布局(GridLayout)。 - Karen
在GridLayout中,您无法修改单元格的大小(单元格具有相等的尺寸)。 - jerjer

0

此外,这是首选大小。如果您不想允许调整大小,也可以设置最大尺寸。

如果您能够,请查看MIG布局,但BoxLayout也易于使用并且已经在Java工具包中。


-2

就是这个。

buttonPanel = new JPanel();
buttonPanel.setSize(new Dimension(30, 100));

不要让布局管理器调整你的大小。


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