我在JPanel
内有一个JScrollPanel
,当编译并运行整个程序时,会显示一个gui,其中包含JPanel
和JScrollPanel
(和其他组件也是如此)。每当用户在JPanel
的边缘绘制某些内容(例如在靠近下边缘或左边缘的 n 像素内)时,gui应自动调整JPanel
的大小,即增加JPanel
的大小。
我使用过鼠标事件监听器(MouseDragged
,MouseClicked
,MousePressed
;用于绘图),在这些监听器中,我为JPanel
设置了新的增加大小。因此,无论何时在边缘绘制某些内容,JPanel
的大小都应该增加(并且在JScrollPane
内,如果增加很大,则应该出现滚动条)。但调整大小没有发生。
答案 0 :(得分:1)
当添加到滚动窗格的视口的组件的首选大小大于滚动窗格的大小时,滚动条将自动出现。因此,您需要覆盖JPanel的getPreferrredSize()
方法,以动态重新计算首选大小。
首选尺寸计算需要考虑:
面板上绘制的所有组件的大小。所以你可能会使用ArayList来跟踪所有组件。然后,您只需遍历列表即可确定任何组件的最大宽度/高度位置。
拖动鼠标时的鼠标位置。如果此值大于上述计算的宽度/高度,则需要使用此值。您还需要为每个mouseDragged事件调用revalidate()
,以确保完成组件的布局。