动态调整JPanel的大小

时间:2014-03-18 18:24:46

标签: java swing dynamic jpanel scrollbar

我在JPanel内有一个JScrollPanel,当编译并运行整个程序时,会显示一个gui,其中包含JPanelJScrollPanel(和其他组件也是如此)。每当用户在JPanel的边缘绘制某些内容(例如在靠近下边缘或左边缘的 n 像素内)时,gui应自动调整JPanel的大小,即增加JPanel的大小。 我使用过鼠标事件监听器(MouseDraggedMouseClickedMousePressed;用于绘图),在这些监听器中,我为JPanel设置了新的增加大小。因此,无论何时在边缘绘制某些内容,JPanel的大小都应该增加(并且在JScrollPane内,如果增加很大,则应该出现滚动条)。但调整大小没有发生。

1 个答案:

答案 0 :(得分:1)

当添加到滚动窗格的视口的组件的首选大小大于滚动窗格的大小时,滚动条将自动出现。因此,您需要覆盖JPanel的getPreferrredSize()方法,以动态重新计算首选大小。

首选尺寸计算需要考虑:

  1. 面板上绘制的所有组件的大小。所以你可能会使用ArayList来跟踪所有组件。然后,您只需遍历列表即可确定任何组件的最大宽度/高度位置。

  2. 拖动鼠标时的鼠标位置。如果此值大于上述计算的宽度/高度,则需要使用此值。您还需要为每个mouseDragged事件调用revalidate(),以确保完成组件的布局。