0

我在里面有自己的自定义控件JScrollPane。这是无尽的(在各个方向)板,上面有网格。

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

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

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

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

4

1 回答 1

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.

于 2013-02-22T06:18:38.180 回答