java - 如何在 Swing 中更改 JScrollBar 的长度?
问题描述
我想将滚动条的大小调整为画布窗口的大小,使其与图像窗口的宽度相同。
这是我到目前为止所拥有的:
任何帮助将不胜感激。
我试过了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);
解决方案
首先- 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()
滚动条。如果您以更孤立的方式测试您的代码,您会发现它可能是您的代码中的错误导致错误。
同样重要的是要注意手动设置大小是不好的做法。
推荐阅读
- reactjs - 如何在 React 中使用 url 设置 Image src?
- php - 如何将排序值数组拆分为最大和 X 的 N 个数组?
- c++ - boost asio示例中的多线程问题
- snowflake-cloud-data-platform - 聚类如何帮助 Snowflake 中的查询修剪?
- python-3.x - 使用 sklearn 的逻辑回归时的值错误
- javascript - 嵌入的欢迎消息未显示
- javascript - JavaScript Promises:无法理解 Resolve 何时在范围内
- xslt - 我们可以在 .xsl 文件中编码 URL 吗?
- javascript - 我正在从 Firebase 检索数据并将其存储在一个对象中,但是当我尝试将其记录到控制台时,它显示未定义......为什么?
- vba - 获取音频文件长度(时间)的函数