我有一个用Java的Swing构建的GUI。我有一个包含所有控件的JPanel:
JPanel rightSidePanel = new JPanel(new GridBagLayout());
rightSidePanel.add(forwardKinematics, new GridBagConstraints());
这很好用。但是,我想添加一个选项卡式控件。不幸的是,添加标签会破坏布局:
JTabbedPane tabs = new JTabbedPane();
tabs.addTab("Forward Kinematics", forwardKinematics);
JPanel rightSidePanel = new JPanel(new GridBagLayout());
rightSidePanel.add(tabs, new GridBagConstraints());
现在,forwardKinematics
中的一些控件非常嘎吱作响,而不是扩展到它们的全尺寸。有没有什么方法我应该指定控件可以扩展并占用他们想要的空间?
我正在使用网格布局。
以下是创建被压缩的UI控件的代码(删除了不相关的摘录):
panel.add(label, new GridBagConstraints());
GridBagConstraints gbc = new GridBagConstraints();
final DefaultTableModel model = new DefaultTableModel();
model.addColumn("foo");
model.addColumn("bar");
final JTable table = new JTable(model);
JScrollPane scrollPane = new JScrollPane(table);
table.setFillsViewportHeight(true);
gbc = new GridBagConstraints();
gbc.gridy = 2;
gbc.ipady = 10;
gbc.ipadx = 10;
panel.add(scrollPane, gbc);
final JComboBox comboBox = new JComboBox();
gbc = new GridBagConstraints();
gbc.gridy = 1;
panel.add(comboBox, gbc);
JButton makeNewButton = new JButton("Make new from current state");
gbc = new GridBagConstraints();
gbc.gridy = 1;
panel.add(makeNewButton, gbc);
JButton deleteButton = new JButton("Delete Current Keyframe");
gbc = new GridBagConstraints();
gbc.gridy = 2;
panel.add(deleteButton, gbc);
JButton playAll = new JButton("Play All");
gbc = new GridBagConstraints();
gbc.gridy = 2;
panel.add(playAll, gbc);
我在这里做错了什么?
更新:我尝试使用tabs.setPreferredSize()
。这使得标签周围的区域更大(好像我正在添加填充),但它们中的内容一如既往地被压扁。
答案 0 :(得分:1)
默认构建的GridBagConstraints
使用NONE
fill
。在您的情况下,您可能希望改为使用BOTH
。
如果您想使用GridBagLayout
,请至少阅读basic tutorial。
答案 1 :(得分:1)
您似乎错过了许多您可能想要在Gridbag约束上设置的设置。您将所有内容设置为gridy = 2,这将它们全部放在同一个单元格中。
gridbaglayout的运行方式类似于具有可配置行和列的表格。