我在JScrollPane
内有自己的自定义控件。这是无穷无尽的(在所有方向)板上有网格。
我尝试了各种方法来实现它,包括扩展JViewport
和setViewport
添加,以及JComponent
扩展和setViewportView
添加。
所有方法都会导致无休止和负面位置的问题。尽管组件可以在负坐标空间中自由绘制,但糟糕的Swing API设计不允许将此信息传输到容器(仅允许维度,即正方向)。
最后我得出结论,如果我完全打破通知JScrollPane
关于它的包含大小,更新滚动条最小值和最大值的通道,我将被允许手动设置最小值和最大值,这将解决任务。
所以,这是一个问题:如何防止自定义组件通知JScrollPane
它的大小?这种预防的简单方法是什么?
答案 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
中的尺寸变化。