【发布时间】:2017-07-03 10:31:43
【问题描述】:
我正在开发一个带有标签工具提示的小型 Swing 应用程序。此应用必须对鼠标事件做出反应,例如单击或退出框架。
没有工具提示,应用程序的行为正确,但如果我添加工具提示,我就没有鼠标事件了。
我写了一个小例子来解释我的问题,一个带有 3 个 Jlabel 的 JFrame。中间的有一个工具提示:
package testJtooltip;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.border.Border;
public class TestToolTip {
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setSize(new Dimension(100,150));
frame.setLocation(100, 100);
frame.setUndecorated(true);
frame.addMouseListener (
new MouseListener () {
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {
System.out.println("exited");
}
public void mousePressed(MouseEvent e) {
System.exit(0);
}
public void mouseReleased(MouseEvent arg0) {}
}
);
Border border = BorderFactory.createLineBorder(Color.BLUE, 1);
JLabel label1 = new JLabel();
label1.setBorder(border);
label1.setText("top");
label1.setPreferredSize(new Dimension(100, 50));
frame.add(label1,BorderLayout.PAGE_START);
JLabel label2 = new JLabel();
label2.setBorder(border);
label2.setText("center");
label2.setPreferredSize(new Dimension(100, 50));
label2.setToolTipText("tooltip");
frame.add(label2,BorderLayout.CENTER);
JLabel label3 = new JLabel();
label3.setBorder(border);
label3.setText("bottom");
label3.setPreferredSize(new Dimension(100, 50));
frame.add(label3,BorderLayout.PAGE_END);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
所以,我的问题是:
1) 点击中心标签不退出(点击其他标签退出)。
2) 在中心标签级别向左或向右退出框架时不会触发 mouseExited(而在其他地方触发事件时)。
3) 从顶部或底部标签移动到中心时会触发 mouseExited 事件。
带有工具提示的 JLabel“似乎”在框架“外部”。
我错过了什么?我该如何修复它,特别是 mouseExited 事件?
【问题讨论】:
-
我相信这就是你要找的东西:Tooltip stealing mouse events
-
感谢您的回复,但不,即使我在工具提示出现之前单击或离开工具提示(但在中心标签内),应用程序也不会退出。更何况,这也解决不了mousExited事件问题……
-
搜索并找到了确切的解决方案。参考这里:stackoverflow.com/questions/14931323/…