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的工作示例。关于如何使用滚动窗格的部分解释了滚动窗格是如何工作的。而且你还没有像上一个问题中建议的那样发布一个正确的滚动窗格。