所以我正在使用Java Swing编写应用程序,我想知道如何使它在整个应用程序调整大小时,只有某些面板以各种方式调整大小。看看下面的两张图片:
我可以看到三个垂直面板。现在,当应用程序的高度延长时,所有三个面板高度也应该增加,这样可以正常工作。然而,当宽度增加时,我想要它,以便只增加中间面板(将是“工作空间”)的宽度。相反,正如您所看到的,右侧最后添加的第三个面板是唯一宽度增加的面板。
我该怎么做才能只有中间JPanel
延伸&整个窗口在x轴上调整大小时缩小?此外,后来我想这样做,以便这个工作区面板并不总是在中间;因为用户可以移动另外两个面板以根据自己的喜好自定义应用程序,例如使工作区位于右侧时使另外两个面板彼此堆叠在一起。但是无论它在哪里,我都希望工作区面板成为调整大小的面板,我该怎么做?
答案 0 :(得分:3)
诀窍是使用适当的值在正确的拆分窗格上调用setResizeWeight(double)
。 E.G。
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);
}
}
答案 1 :(得分:-1)
您可以制作框的约束,使它们依赖于窗口的相应边。
因此左侧窗格是左侧的X像素,右侧窗格是右侧的Y像素,然后中间的左侧窗格左侧是X +,右侧是右侧的Y +
只要你没有将窗口调整得太小(因为那时元素太大),这就有效。