我有一个JPanel(名为mainJP),其中有一些按钮和标签(使用BorderLayout)。接下来,它添加另一个JPanel(名为JP1),并在其中添加一个带有ScrollPaneJTable。我希望能够调整JP2的大小,并依次调整其所有子组件(ScrollPaneJTable)。这样一来,无需滚动即可看到JTable的更多行。同样,为了调整JP1的大小,JP1的其他同级也应自行调整。不确定如何实现。

如图所示,我已经实现了一些功能-完全删除JP1,展开/折叠JP1视图,删除和添加JTable中的行。

因此,基本上,我希望能够在JP1的底部边框上拖动鼠标以垂直增加JP1及其子组件(ScrollPaneJTable)的大小。

如以下一些解决方案中所述,我仍然对应该合并JSpiltPane在哪个级别上感到困惑-因为它仅允许添加2个组件。我认为所有JP1都应该在JSplitPane中。但是,可以有多个JP1组件,并且它们是动态添加的。

最佳答案

向JSplitPane添加额外的组件很容易。在要显示组件的每个窗格中放置一个JPanel,然后将组件添加到此面板中-您可以根据需要自定义布局。

这样的事情会将JSplitPane放入已经创建的JFrame中,向每个窗格中添加一个JPanel,然后在左侧添加一些JLabel,在右侧添加一个JTextField。拆分窗格将扩展到其所在的JFrame的大小。

JSplitPane splitPane = new JSplitPane();
JPanel leftPanel = new JPanel();
JPanel rightPanel = new JPanel();
JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
JTextField textField = new JTextField();
GridBagConstraints gBC = new GridBagConstraints();

getContentPane().setLayout(new GridBagLayout());
leftPanel.setLayout(new GridBagLayout());
rightPanel.setLayout(new GridBagLayout());

// I'm not going to bother doing any layout of the label or textfield here
leftPanel.add(label1, new GridBagConstraints());
leftPanel.add(label2, new GridBagConstraints());
rightPanel.add(textField, new GridBagConstraints());

splitPane.setLeftComponent(leftPanel);
splitPane.setRightComponent(rightPanel);

gBC.fill = GridBagConstraints.BOTH;
gBC.weightx = 1.0;
gBC.weighty = 1.0;
getContentPane().add(splitPane, gBC);

pack();

08-07 10:19