java - GridBagLayout 中的 JScrollPanes 随机调整大小

标签 java swing resize jscrollpane gridbaglayout

这对你们来说是一个艰难的过程:)

基本上我有一个包含 2 列的 GridBagLayout:一个 list 包裹在每一个 scrollpane 中。滚动 Pane 在两个方向拉伸(stretch)。

如果我逐渐降低此面板的高度(通过拖动窗口的边缘),我会看到滚动 Pane 上发生“随机”调整大小:

  • 当第一个的 Hscroll 条出现时,第二个的宽度减小

  • 然后,第二个的宽度又莫名其妙的缩小了...

如果我不包装我的组件,就不会出现这种行为。


如果您用 tree 替换右边的列表,它的行为会有所不同: 将窗口的高度缩小到 380-ich px 以下,树会调整大小...

如果我不包装我的组件,那么如果您继续调整窗口大小,树无论如何都会调整大小!

你们知道发生了什么事吗???

PS:我尝试构建的实际布局比此示例更复杂。与此同时,我使用 SpringLayout 来做我想做的事,但它需要很多(不是那么漂亮)的东西来设置

protected static ListModel newListModel(int n) {
    DefaultListModel lm = new DefaultListModel();

    for (int i = 0; i < n; ++i)
        lm.addElement("AAA");

    return lm;
}

protected static JComponent createContentPane() {
    JPanel  pane = new JPanel(new GridBagLayout());

    GridBagConstraints  gbc = new GridBagConstraints();

    gbc.anchor = GridBagConstraints.CENTER;
    gbc.fill = GridBagConstraints.BOTH;
    gbc.weightx = 1;
    gbc.weighty = 1;
    gbc.gridy = 0;
    gbc.gridx = 0;

    pane.add(new JScrollPane(new JList(newListModel(12))), gbc);

    ++gbc.gridx;

    pane.add(new JScrollPane(new JList(newListModel(4))), gbc);

    return pane;
}

public static void main(String[] args) {
    JFrame f = new JFrame();

    f.getContentPane().add(createContentPane());
    f.setSize(800, 400);
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    f.setVisible(true);
}

最佳答案

我有一个在 GridBagLayout 中有多个滚动面板的应用程序,当我调整窗口大小时,它们也会突然调整大小。当 ScrollPane 的实际大小超过其“首选大小”时,似乎会发生跳跃。我找到了一个解决方法:将首选大小设置为 1x1 像素。如果组件的权重为正并且同时拉伸(stretch),它仍然会占据整个单元格,但不会跳跃。如果您需要多个单元格按不同比例调整大小,您可以将另一个单元格的首选大小设置为 2x1 像素。

关于java - GridBagLayout 中的 JScrollPanes 随机调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9632936/

相关文章:

Java OutputStream 仅在关闭时刷新数据

Java/TCP 流量类

java - JTextArea-Dialog 作为 JTable-CellEditor 错过了第一个键入的字符

java - 如何访问 Swing JTextField/JPasswordField 内的值?

jquery - 可拖动的遏制和调整窗口大小

java - 在另一个类中获取 Android Volley 响应

java - 登录按钮和服务器端身份验证

java - 无法通过 Java 应用程序将数据添加到数据库

qt - 在Qt4中,如何检查paintEvent是否由resize触发?

JQuery - 如何平滑地调整图像大小以创建脉动效果?