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

时间:2013-02-21 23:54:58

标签: java swing jscrollpane

我在JScrollPane内有自己的自定义控件。这是无穷无尽的(在所有方向)板上有网格。

我尝试了各种方法来实现它,包括扩展JViewportsetViewport添加,以及JComponent扩展和setViewportView添加。

所有方法都会导致无休止和负面位置的问题。尽管组件可以在负坐标空间中自由绘制,但糟糕的Swing API设计不允许将此信息传输到容器(仅允许维度,即正方向)。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

因此,当用户增加NORTH(+10)时,我们只需增加班次g.translate(10,10+10)并增加JPanel's首选高度以反映JScrollPane中的尺寸变化。