私は、ラベル上にツールチップを含む小さなSwingアプリケーションを開発しています。このアプリは、クリックやフレームの終了などのマウスイベントに反応する必要があります。
ツールチップがないとアプリは正しく動作しますが、ツールチップを追加するとマウスイベントがなくなります。スイング:マウスイベントとツールチップ
私は私の問題を説明するために小さな例を書いた、3つのJlabelsを持つJFrame。センター内の1つのツールヒントがあります:
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