gpt4 book ai didi

java - 使用 BorderLayout 时如何防止 JPanel 中的内容拉伸(stretch)?

转载 作者:行者123 更新时间:2023-12-01 14:31:08 25 4
gpt4 key购买 nike

出于某种原因,我添加到内容 JPanel 中的 JPanel 是垂直拉伸(stretch)的,而不是首选尺寸。代码如下:

    public static JPanel content;

public APP()
{
setLayout(new BorderLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setJMenuBar(new MenuBar());

content = new JPanel(new GridLayout(0, 8, 2, 2));
add(new JScrollPane(content, 22, 32), BorderLayout.CENTER);

pack();
setLocationRelativeTo(null);
setResizable(false);
setVisible(true);

addJPanel();
addJPanel();
}

public void addJPanel()
{
JPanel box = new JPanel();
box.setPreferredSize(new Dimension(100, 100));
box.setBackground(Color.BLACK);
content.add(box);
content.validate();
}

添加它们时如何使它们保持特定大小?或者至少防止它们一直延伸到内容面板上。我希望它们的尺寸都相同,而不会随着添加更多面板而改变其尺寸。

*注意: addJPanel() 允许我使用按钮或操作动态地将新面板添加到内容面板中。这只是一个测试方法,真正的面板添加来自于菜单按钮调用的 Action 。

最佳答案

我最终找到了一个使用胶水进行框布局的解决方案,因为我真的想使用 GridLayout 来使我所做的事情变得简单:

我添加了另一个 JPannel,然后向其添加胶水,然后向其添加内容,然后将带有胶水的面板添加到滚动 Pane 中的框架:

public static JPanel content;
public static JPanel wrapper;

public APP()
{
setLayout(new BorderLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setJMenuBar(new MenuBar());

content = new JPanel(new GridLayout(0, 8, 2, 2));

wrapper = new JPanel(new BorderLayout());
wrapper.add(Box.createGlue(), BorderLayout.CENTER);
wrapper.add(content, BorderLayout.NORTH);
add(new JScrollPane(wrapper, 22, 32), BorderLayout.CENTER);

pack();
setLocationRelativeTo(null);
setResizable(false);
setVisible(true);
}

然后我只使用wrapper.revalidate(),以便它考虑新的维度。现在就像一个魅力。

关于java - 使用 BorderLayout 时如何防止 JPanel 中的内容拉伸(stretch)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16857322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com