如何在Swing中更改JScrollBar的长度?

时间:2019-01-25 01:57:22

标签: java swing jframe 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);

1 个答案:

答案 0 :(得分:0)

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

特别重要的是要了解这一点:

  

在GridBagLayout中,无法指定网格的大小。没有必要。网格大小由所有对象的约束隐式确定;

在此图像中可以看到一个示例。屏幕上的每个“位置”实际上都是一个相对的网格位置。

enter image description here

其次-您的问题措辞古怪,但据我了解,您想更改滚动条的长度,以便覆盖更多屏幕。为了更改滚动条的属性,重要的是更改ScrollBar.setPreferedSize()See JScrollBars.

这是正确的更改方法。如果setPreferedSize()无法正常工作,那么您显然没有发布所有代码。尝试检查您没有在程序的某个位置覆盖它(使用setMaximumSize()或通过在其他地方意外地设置大小)。

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

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()正确地滚动条。如果您以更隔离的方式测试代码,则会发现这可能是导致错误的代码错误。

另外请注意it is bad practice to set size manually