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

Java 如何在Swing中更改JScrollBar的长度?,java,swing,jframe,jscrollbar,Java,Swing,Jframe,Jscrollbar,我想将滚动条的大小调整为画布窗口的大小,使其与图像窗口的宽度相同 这就是我到目前为止所做的: 任何帮助都将不胜感激 我尝试了setPreferedsize(),我尝试了setVisibleAmount(),但都没有成功 JScrollBar SB = new JScrollBar(); SB.setMinimum(1); SB.setMaximum(Cavalieri_counting_2.img.getNSlices() + 9);

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

这就是我到目前为止所做的:

任何帮助都将不胜感激

我尝试了
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);

首先-网格包布局不通过设置像素坐标来工作,而是与屏幕上的其他对象成比例构建。见链接

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

在GridBagLayout中,没有办法指定网格的大小。不一定有。网格大小由所有对象的约束隐式确定

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

其次您的问题措辞奇怪,但据我所知,您希望更改滚动条的长度,使其覆盖更多屏幕。要更改滚动条的属性,必须更改
ScrollBar.setPreferedSize()

这是改变的正确方法。如果
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()
滚动条。如果您以一种更孤立的方式测试代码,您会发现可能是代码中的一个bug导致了错误


还有一点需要注意。

(1-)为什么要使用JScrollBar???上一个问题()中的建议是使用JScrollPane
gbc_滚动条.gridy=18-你从哪里得到这些号码的?不能只是随机选择18和20作为数字,只有在面板中添加了20个其他组件时,才能使用这些值。阅读上的Swing教程,了解基本知识和工作示例。我还将阅读关于
如何使用文本区域
的部分,了解使用JScrollPane的工作示例。关于
如何使用滚动窗格的部分解释了滚动窗格是如何工作的。而且你还没有像上一个问题中建议的那样发布一个正确的滚动窗格。