2つのパネルにマウスリスナーを追加したときに問題が発生しました。どちらもmouseEntered()
とmouseExited()
メソッドを使用しています。MouseListenerが重なっている複数のペイン
テストコードベローズの期待される結果は次のとおり
- IがIフレームで赤色矩形に置くと赤色矩形
- 可視化されるべきフレームにホバー青はになるはずです。私のマウスは今青い四角形を終了
- (それでもフレームの内側)には有効にする必要があり赤私のマウスは完全に今赤長方形が表示されないはずのフレームを終了
マウスを色の付いた四角形の上に移動しようとすると、表示されている状態から表示されない状態まで点滅し続けます。システムのプリントには、マウスを動かすたびにクリックするたびに、マウスの入力とマウスの終了が有効になります。とにかくmouseExited()
メソッドが私のマウスを動かしたりクリックするたびに呼び出されないようにするにはどうしますか?ここで
は、テストコードです:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Sandbox extends JPanel {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(500, 500);
frame.add(new Sandbox());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public Sandbox() {
super(new BorderLayout());
final JPanel panelA = new JPanel();
panelA.setBackground(Color.red);
panelA.setPreferredSize(new Dimension(155, 155));
panelA.setVisible(false);
this.add(panelA, BorderLayout.WEST);
this.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
System.out.println(" - MOUSE ENTERED ");
panelA.setVisible(true);
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println(" - MOUSE EXITED ");
panelA.setVisible(false);
}
});
panelA.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
System.out.println(" # MOUSE ENTERED ");
panelA.setBackground(Color.blue);
}
@Override
public void mouseExited(MouseEvent e) {
panelA.setBackground(Color.red);
System.out.println(" # MOUSE EXITED ");
}
});
}
}
今週の質問 – mKorbel