Java 为什么Swing JScrollPane没有';鼠标滚轮没有反应?
我有以下Swing UI结构 当我在蓝色JPanel中滚动鼠标滚轮时,JScrollPane不会响应鼠标滚轮事件。为什么? 我从java文档中读到: JScrollPane提供了轻量级组件的可滚动视图。。。 请注意,JScrollPane不支持重量级组件 这是因为我的结构太重了吗?还是其他原因 加1 我不小心用鼠标中键切换了窗口。在那之后,鼠标滚轮突然为JScrollPane工作 这让我想到可能与Java 为什么Swing JScrollPane没有';鼠标滚轮没有反应?,java,swing,awt,jscrollpane,Java,Swing,Awt,Jscrollpane,我有以下Swing UI结构 当我在蓝色JPanel中滚动鼠标滚轮时,JScrollPane不会响应鼠标滚轮事件。为什么? 我从java文档中读到: JScrollPane提供了轻量级组件的可滚动视图。。。 请注意,JScrollPane不支持重量级组件 这是因为我的结构太重了吗?还是其他原因 加1 我不小心用鼠标中键切换了窗口。在那之后,鼠标滚轮突然为JScrollPane工作 这让我想到可能与焦点相关。然后我发现下面一行: this.setFocusableWindowState(fals
焦点相关。然后我发现下面一行:
this.setFocusableWindowState(false);
当我把它改为下面的时候,鼠标滚轮工作了
this.setFocusableWindowState(true);
尽管javadoc说:
将窗口的聚焦状态设置为false是标准
应用程序向AWT标识窗口的机制
将用作浮动调色板或工具栏,因此应为
非聚焦窗口
首先,我想这是因为JDialog没有处于可聚焦窗口状态,所以它不能接收事件。但实际上,鼠标点击总是有效的。所以我仍然不确定根本原因
工具栏或浮动调色板似乎无法聚焦,但仍然可以接收鼠标单击事件。因此,我猜可能只有某些事件被setFocusableWindowsState(false)
过滤关于组件重量大:AWT组件是指使用操作系统小部件的组件。使用swing JComponents,J*。Swing组件被称为轻量级组件,因为它们在一个大型本机窗口中模拟所有绘图和事件处理
JPanel应该比JScrollPane大,因此可以滚动“查看端口”。正确设置首选尺寸
总的来说,我会认为每个JTextPane都有自己的JScrollPane
JScrollPane的功能也有点不同
scrollPane = new JScrollPane(panel);
为了更快地获得更好的帮助,可以发布一个(最小完整的可验证示例)或(简短、自包含、正确的示例)。“这是因为我的结构太重了吗?”如果是5000个文本窗格的话。问题可能是文本窗格正在使用鼠标滚轮事件。没有任何问题,包括滚动子级,例如父级JScrollPane中的JScrollPane,默认情况下JTextPane从不使用()这些事件,投票决定在没有SSCCE/MCVE、短、可运行、可编译、,如果JTextPane/(Xxx)Document/(Xxx)EditorKit没有硬编码值,则“正确设置首选大小”。请参见(是)。如果使用HTML内容,内容可以在CSS中显示宽度,而CSS又会显示高度。如果这个条件(HTML内容)在这里不适用,那么最好覆盖而不是设置文本窗格的首选大小。顺便说一句,我在读它的前几次时误解了第一句话的意思,只是因为单词的顺序不符合我的预期。现在我确实明白了写的是什么,还有一个。:)哦,对不起,在写最后的评论和投票之间,我有点心烦意乱虽然到今天还没有清晰的风格,但还是有那么重。欢迎反馈;不相关的观点。可能类似“重量级组件”的意思是AWT组件(例如java.AWT.Panel
或java.AWT.TextArea
)使用操作系统小部件,不像Swing软件包中的“轻量级组件”,比如javax.Swing.JPanel
或javax,Swing.JTextPane
,如上所示,我仍然更喜欢你关于Swing组件的第二句话,而不是我刚才写的那句话的结尾P..也许可以保持原样。:)