我想将滚动条的大小调整为画布窗口的大小,使其与图像窗口的宽度相同。
这是我到目前为止所拥有的:
任何帮助将不胜感激。
我尝试了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);
答案 0 :(得分:0)
首先-GridBag布局无法通过设置像素坐标来工作,而是与屏幕上的其他对象成比例地构造。请参阅this链接。
特别重要的是要了解这一点:
在GridBagLayout中,无法指定网格的大小。没有必要。网格大小由所有对象的约束隐式确定;
在此图像中可以看到一个示例。屏幕上的每个“位置”实际上都是一个相对的网格位置。
其次-您的问题措辞古怪,但据我了解,您想更改滚动条的长度,以便覆盖更多屏幕。为了更改滚动条的属性,重要的是更改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()
正确地滚动条。如果您以更隔离的方式测试代码,则会发现这可能是导致错误的代码错误。