我正在開發一個帶標籤工具提示的小型擺動應用程序。這個應用程序必須對鼠標事件作出反應,例如點擊或退出框架。
沒有工具提示,該應用程序的行爲正確,但如果我添加工具提示,我不再有鼠標事件。擺動:鼠標事件和工具提示
我寫了一個小例子來解釋我的問題,一個帶3個Jlabels的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](https://stackoverflow.com/questions/5305462/tooltip-stealing-mouse-events?rq=1) –
感謝您的迴應,但不,即使我在點擊工具提示之前點擊或者點擊工具提示(但位於中心標籤內),應用程序也不會退出。更多,這不能解決mousExited事件問題... – Carminou
搜索並找到確切的解決方案。請參閱這裏:https://stackoverflow.com/questions/14931323/jlabel-tooltip-interferes-with-mouselistener – Aman