java - JPanel 的动态调整大小

标签 java swing dynamic jpanel scrollbar

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

最佳答案

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

首选尺寸计算需要考虑:

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

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

关于java - JPanel 的动态调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22487909/

相关文章:

java - 反序列化空值以使用 Jackson 进行枚举

java - Maven 依赖项找不到 sendgrid-java 的 zip 文件

c++ - 我的 append 功能没有按预期工作。 C++

c - 为什么 gets() 读取的字符比我在用 calloc() 初始化它时设置的限制更多?

ruby-on-rails - 如何使用动态属性对问卷数据库关系建模

java - openjdk:如何将网站添加到异常(exception)列表

java - 设置按钮在 XML 中闪烁?

java - 将 JPanel 添加到 JPanel 数组

java - 将数组从 SwingWorker 线程返回到主线程

java - 为什么 JPanels 不显示?