使用JTabbedPane时遇到困难(错误地压缩内容)

时间:2010-10-28 16:28:50

标签: java user-interface swing

我有一个用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()。这使得标签周围的区域更大(好像我正在添加填充),但它们中的内容一如既往地被压扁。

2 个答案:

答案 0 :(得分:1)

默认构建的GridBagConstraints使用NONE fill。在您的情况下,您可能希望改为使用BOTH

如果您想使用GridBagLayout,请至少阅读basic tutorial

答案 1 :(得分:1)

您似乎错过了许多您可能想要在Gridbag约束上设置的设置。您将所有内容设置为gridy = 2,这将它们全部放在同一个单元格中。

gridbaglayout的运行方式类似于具有可配置行和列的表格。