我在 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/