编程语言
首页 > 编程语言> > java – GridBagLayout中的JScrollPanes随机调整大小

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

作者:互联网

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

基本上我有一个包含2列的GridBagLayout:一个包含在每个列的滚动窗格中的列表.滚动窗格沿两个方向拉伸.

如果我逐渐减小这个面板的高度(通过拖动窗口的边缘),我会在滚动窗格上看到“随机”调整大小:

>当第一个Hscroll栏出现时,第二个宽度会减小
>然后,第二个人的宽度再次无缘无故地缩小……

如果我不包装我的组件,请不要这样做.

如果用树替换右侧列表,它将表现不同:
缩小窗口的高度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中有一个带有多个ScrollPanes的应用程序,当我调整窗口大小时,它们也会突然显示调整大小.当ScrollPane的实际大小超过其“首选大小”时,似乎会发生跳转.我找到了一个解决方法:将首选大小设置为1×1像素.如果该组件具有正重量并且延伸两倍,它仍将占据整个细胞,但不会跳跃.如果需要多个单元格以不同的比例调整大小,可以将另一个单元格的首选大小设置为2×1像素.

标签:java,swing,resize,jscrollpane,gridbaglayout
来源: https://codeday.me/bug/20190716/1481298.html