0

我已将两个 JPanel 添加到JPanelwith 中GridBagLayout。现在的问题是:

当主面板加载时,它会在实际位置上方显示上面板位,并且当来自 db 的数据加载到JTextfields然后JComboBox面板变为其实际大小时。

示例代码:

public class JPanelIssue extends JPanel {
    public JPanelIssue() {
    JPanel mainPanel = new JPanel(new GridBagLayout());
    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();
    mainPanel.add(panel1, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.6, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
    mainPanel.add(panel2, new GridBagConstraints(0, 1, 1, GridBagConstraints.REMAINDER, 1.0, 0.4,GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));

    add(mainPanel, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
    }
}

panel1包含与搜索条件相关的字段并panel2包含JTable显示结果。

AWT 事件队列是否有任何问题或任何其他问题?

提前致谢。

4

1 回答 1

2

只评论

无法从这段代码中重现,因为你忘了添加一些关于JTextfields and JComboBox then panel goes to its actual size.

当主面板加载时,它会在实际位置上方显示上面板位,当来自 db 的数据加载到 JTextfields 和 JComboBox 时,面板会变为实际大小。

GBC是基于PreferredSizeJComponents返回到contianer(假设大约JPanel

有两种方法

  1. (proper)也为JTextFieldJComboBox设置适当的 PreferredSize

  2. (sizing hack)覆盖包含 和getPreferredSize_JPanelJTextFieldJComboBox

  3. 然后应通知所有其他父/容器而不覆盖任何setSize, setBounds, setPreferredSize, 仅由JFrame.pack()

于 2013-04-26T11:31:06.190 回答