首页 > 解决方案 > 如何在 Swing 中更改 JScrollBar 的长度?

问题描述

我想将滚动条的大小调整为画布窗口的大小,使其与图像窗口的宽度相同。

这是我到目前为止所拥有的:

https://i.stack.imgur.com/5Xpxf.png

任何帮助将不胜感激。

我试过了setPreferedsize(),我试过了,setVisibleAmount()但没有一个工作。

     JScrollBar SB = new JScrollBar();


        SB.setMinimum(1);
        SB.setMaximum(Cavalieri_counting_2.img.getNSlices() + 9);
        SB.setValue(img.getCurrentSlice());
        SB.setOrientation(Adjustable.HORIZONTAL);
        //SB.setVisibleAmount(SB.getMaximum());;

        //SB.setOrientation(JScrollBar.HORIZONTAL);
        GridBagConstraints gbc_scrollBar = new GridBagConstraints();
        //gbc_scrollBar.insets = new Insets(0, 0, 5, 0);
        gbc_scrollBar.gridwidth = 20;
        gbc_scrollBar.gridx = 0;
        gbc_scrollBar.gridy = 18;
        View_Panel.add(SB, gbc_scrollBar);
        SB.setVisible(true);

标签: javaswingjframejscrollbar

解决方案


首先- GridBag 布局不能通过设置像素坐标来工作,而是与屏幕上的其他对象成比例地构造。请参阅链接。

尤其重要的是要理解这一点:

在 GridBagLayout 中没有办法指定网格的大小。不必有。网格大小由所有对象的约束隐含地确定;

在这张图片中可以看到一个例子。屏幕上的每个“位置”实际上是一个相对网格位置。

在此处输入图像描述

其次-您的问题措辞奇怪,但据我所知,您想更改滚动条的长度,以使其覆盖更多屏幕。为了改变滚动条的属性,改变是很重要的ScrollBar.setPreferedSize()请参阅 JScrollBars。

这是改变的正确方法。如果setPreferedSize()不起作用,那么您显然没有发布所有代码。尝试检查您是否没有在程序中的某处覆盖它(使用 setMaximumSize()或通过在其他地方意外地再次设置大小)。

如果您没有覆盖它,那么您可能会遇到布局管理器错误。在您的其他问题中,您似乎是手动设置行和列大小。这可能会覆盖组件的大小:

GridBagLayout gbl_ViewPane = new GridBagLayout();
gbl_ViewPane.columnWidths = new int[]{0, 0, 0, 0, 0, 222, 0};
gbl_ViewPane.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
gbl_ViewPane.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
gbl_ViewPane.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
ViewPane.setLayout(gbl_ViewPane);

或者,您的布局管理器可能没有正确实现,或者您可能没有正确设置pack()滚动条。如果您以更孤立的方式测试您的代码,您会发现它可能是您的代码中的错误导致错误。

同样重要的是要注意手动设置大小是不好的做法


推荐阅读