为什么Swing JScrollPane不响应鼠标滚轮?

时间:2015-04-02 09:04:48

标签: java swing awt jscrollpane

我有以下Swing UI结构。

当我在蓝色JPanel中滚动鼠标滚轮时,JScrollPane不响应鼠标滚轮事件。为什么呢?

我从java doc中读到:

  

JScrollPane提供轻量级组件的可滚动视图。 ...   请注意,JScrollPane不支持重量级组件。

这是因为我的结构太重了?还是其他任何原因?

enter image description here

ADD 1

我不小心用鼠标中键点击了我的窗口。之后,鼠标滚轮突然为JScrollPane工作了。

这让我想到它可能与focus有关。然后我发现下面一行:

this.setFocusableWindowState(false);

将其更改为下方后,鼠标滚轮可以正常工作。

this.setFocusableWindowState(true);

虽然javadoc说:

  

将窗口的可聚焦状态设置为false是标准   应用程序向AWT识别一个Window的机制   将用作浮动调色板或工具栏,因此应该是   不可聚焦的窗口。

首先,我猜是因为JDialog不处于可聚焦窗口状态,因此它无法接收事件。但实际上,鼠标点击始终有效。所以我仍然不确定根本原因。

似乎工具栏或浮动调色板无法聚焦但仍可以接收鼠标点击事件。所以我猜{strong>可能只有某些事件被setFocusableWindowState(false)过滤。

1 个答案:

答案 0 :(得分:2)

关于重量级的组件:意味着使用操作系统小部件的AWT组件。你使用swing JComponents,J *。 Swing组件称为轻量级,因为它们在一个大型本机窗口中模拟所有绘图和事件处理。

JPanel应该比JScrollPane大,所以一个"查看端口"可以滚动。 首选尺寸设置正确。

一般来说,我会认为每个JTextPane都在自己的JScrollPane中。

JScrollPane的功能也有所不同。

scrollPane = new JScrollPane(panel);