java - 如何在 JScrollPane 中阻止滚动条更新?

标签 java swing jscrollpane

我在 JScrollPane 中有自己的自定义控件。这是一个无尽的(在所有方向上)棋盘,上面有网格。

我尝试了各种方法来实现它,包括扩展JViewport并通过setViewport添加,以及扩展JComponent并通过添加setViewportView

所有方法都会导致一些无穷无尽和负位置的问题。虽然组件可以在负坐标空间中自由绘制自己,但糟糕的 Swing API 设计不允许将此信息传输到容器(只允许尺寸,即正方向)。

最后我得出结论,如果我完全破坏通知 JScrollPane 其包含大小的 channel ,该 channel 更新滚动条的最小值和最大值,我将被允许手动设置最小值和最大值,这将解决任务。

所以,这就是问题:如何防止自定义组件通知 JScrollPane 它的大小?防止这种情况的简单方法是什么?

最佳答案

我宁愿将逻辑(模型)坐标和组件坐标/大小分开。因此,当用户增加北方向时,您应该向组件的高度添加适当的更改值,并将渲染(或组件)的垂直位置向下移动。

作为示例,我有一个模型元素 - 矩形 放置在 (0,0) 中。绘制矩形的 JPanel 的初始绘制点=(10,10)。事实上,当我们绘制时,我们只需 g.translate(10,10),然后绘制模型 g.draw(myRectangle);

因此,当用户增加 NORTH (+10) 时,我们只需增加偏移 g.translate(10,10+10) 并增加 JPanel 的首选高度以反射(reflect)JScrollPane 中的大小更改。

关于java - 如何在 JScrollPane 中阻止滚动条更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15014477/

相关文章:

java.lang.IllegalStateException : Already using output stream 错误

java - 如何更改java小程序的消息框标题?

java - MVC 和 JFrame

java - 如何获取所选元素的背景颜色?

java - JScrollPane 多行中的 JTextArea

java - 如何在 java 中清理 XML 的 header ?

java - Criteria 查询返回所有记录

java - 自动完成 TextView 不显示带有自定义适配器的下拉列表

java - 如何更改 JScrollPane 拇指颜色?

java - 将 JPanel 转换为 JScrollPane 中的图像