これは、別のプロジェクトで直面している問題を示すために使用しているコードです。
JScrollPane を panel2 のラッパーとして使用すると、このような行は表示されません。なんで? JscrollPane をクリックして、イベントを次のように出力します。
java.awt.event.MouseEvent[MOUSE_CLICKED,(800,469),absolute(808,499),button=1,modifiers=Button1,clickCount=1] on javax.swing.JPanel[,0,0,934x612,layout=java.awt.FlowLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.LineBorder@cc0e01,flags=9,maximumSize=,minimumSize=,preferredSize=java.awt.Dimension[width=880,height=630]]
もし今私が変われば
panel1.add(pane);
に
panel1.add(panel2);
その後、上記のメッセージが印刷されました。
public class LostMouseEvent {
public static void main(String[] args) {
new LostMouseEvent();
}
public LostMouseEvent() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JScrollPane pane = new JScrollPane(panel2);
panel1.setPreferredSize(new Dimension(880, 630));
panel1.setBorder(BorderFactory.createLineBorder(Color.blue));
panel2.setPreferredSize(new Dimension(840, 610));
panel2.setBorder(BorderFactory.createLineBorder(Color.green));
panel1.add(pane);
frame.add(panel1);
frame.pack();
frame.setVisible(true);
frame.setSize(950, 650);
panel1.addMouseListener(new MyMouseListener());
}
});
}
private class MyMouseListener extends MouseAdapter {
@Override
public void mouseClicked (MouseEvent me) {
System.out.println(me);
}
}
}
UPD:実際、私のプロジェクトには複数の panel2 があります。もともと、私は内部に panel1 と多くの panel2 を持っていました。次に、各 panel2 を JScrollPane でラップしたいと思い、この問題に直面し始めました。
コードへの変更を最小限に抑えるには、MouseListener が 1 つだけあれば十分です。