gpt4 book ai didi

java - 如何选择当整个应用程序调整拆分 Pane 中的 JPanel 大小时。已调整大小?

转载 作者:行者123 更新时间:2023-11-30 03:25:03 28 4
gpt4 key购买 nike

所以我正在使用 Java Swing 编写一个应用程序,我想知道如何制作它,以便当整个应用程序调整大小时,只有某些面板以各种方式调整大小。看看下面两张图:

JavaSwing before resize JavaSwing after resize

如您所见,我有三个垂直面板。现在,当应用程序的高度扩展时,所有三个面板的高度也应该增加,效果很好。然而,当宽度增加时,我希望只有中间面板(这将是“工作区”)的宽度增加。相反,正如您所看到的,右侧最后添加的第三个面板是唯一宽度增加的面板。

如何才能使整个窗口在 x 轴上调整大小时只有中间的 JPanel 拉伸(stretch)和收缩?另外,稍后我想让这个工作区面板不总是位于中间;因为用户可以移动其他两个面板来根据自己的喜好自定义应用程序,例如使其他两个面板在左侧堆叠在一起,而工作区位于右侧。但是,无论它在哪里,我都希望工作区面板成为调整大小的面板,我该怎么做?

最佳答案

诀窍是调用setResizeWeight(double)在正确的分割 Pane 中使用适当的值。例如

Two split panes at minimum size

Two split panes with extra width

Two split panes with extra width & height

import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;

public class DualingSplitPanes {

private JComponent ui = null;

DualingSplitPanes() {
initUI();
}

protected final void addPanelsToUi(JPanel p1, JPanel p2, JPanel p3) {
JSplitPane sp1 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, p1, p2);
JSplitPane sp2 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, sp1, p3);
sp2.setResizeWeight(1);

ui.add(sp2);
}

public void initUI() {
if (ui!=null) return;

ui = new JPanel(new BorderLayout(4,4));
ui.setBorder(new EmptyBorder(4,4,4,4));

JPanel treeContainer = new JPanel(new GridLayout());
JTree tree = new JTree();
tree.setVisibleRowCount(5);
for (int i=tree.getVisibleRowCount()-1; i>-1; i--) {
tree.expandRow(i);
}
treeContainer.add(new JScrollPane(tree));

JPanel workSpaceContainer = new JPanel(new GridLayout());
workSpaceContainer.add(new JTextArea(5, 10));

JPanel searchContainer = new JPanel(new BorderLayout(4, 4));
searchContainer.add(new JScrollPane(new JTextArea(5, 10)));

addPanelsToUi(treeContainer, workSpaceContainer, searchContainer);
}

public JComponent getUI() {
return ui;
}

public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception useDefault) {
}
DualingSplitPanes o = new DualingSplitPanes();

JFrame f = new JFrame(o.getClass().getSimpleName());
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);

f.setContentPane(o.getUI());
f.pack();
f.setMinimumSize(f.getSize());

f.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}

关于java - 如何选择当整个应用程序调整拆分 Pane 中的 JPanel 大小时。已调整大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30448422/

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