我有一个 JPanel
,位于 JScrollPanel
中,当整个程序编译并运行时,会显示一个包含 JPanel
和JScrollPanel
(以及其他组件)。每当用户在 JPanel
的边缘绘制某些内容(例如在靠近下边缘或左边缘的 n 像素内)时,GUI 应该自动调整 JPanel
的大小code>,即增加JPanel
的大小。
我使用了鼠标事件监听器(MouseDragged
、MouseClicked
、MousePressed
;用于绘图),在这些监听器中,我为JPanel
。因此,每当在边缘绘制某些内容时,JPanel
的大小都应该增加(并且由于它位于 JScrollPane
内,如果增加幅度很大,则应该增加滚动条)出现)。但调整大小并没有发生。
最佳答案
当添加到滚动 Pane 视口(viewport)的组件的首选大小大于滚动 Pane 的大小时,滚动条将自动出现。因此,您需要重写 JPanel 的 getPreferrredSize()
方法来动态重新计算首选大小。
首选尺寸计算需要考虑:
面板上绘制的所有组件的大小。所以你可能会使用 ArayList 来跟踪所有组件。然后,您只需循环遍历列表即可确定任何组件的最大宽度/高度位置。
拖动鼠标时的鼠标位置。如果该值大于上述计算的宽度/高度,则需要使用该值。您还需要为每个 mouseDragged 事件调用
revalidate()
以确保组件的布局完成。
关于java - JPanel 的动态调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22487909/