入力要素とは、JSpinners や JComboxBoxes などを意味します。私のグラスペインには、JSpinners、JComboBoxes、そして大部分の JLabels を含む JPanel が渡されます。ガラス板には MouseListener がアタッチされています。驚くべきことに、マウス カーソルが入力要素を離れ、JPanel の他の部分または空きスペースの上にマウス カーソルを置いたときに、mouseEntered が呼び出されます。これは正常な動作ですか?入力要素を Glasspane の目的で JPanel の一部と見なすにはどうすればよいですか?
これは、入力要素と jLabels を含む私の UI のスクリーンショットです。
コードの例を次に示します。
import javax.swing.*;
public class DialogTest {
public DialogTest() {
JPanel dialogPanel = new JPanel();
SpinnerModel edgeModel = new SpinnerNumberModel(1, 1, 9, 1);
JSpinner edgeSpn = new JSpinner(edgeModel);
dialogPanel.add(edgeSpn);
JDialog initialDialog = new JDialog(new JFrame(), "Test", true);
initialDialog.setContentPane(dialogPanel);
initialDialog.pack();
glass = new GlassComponent(dialogPanel);
initialDialog.setGlassPane(glass);
glass.setOpaque(false);
glass.setVisible(true);
initialDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
initialDialog.setVisible(true);
}
}
public class GlassComponent implements MouseListener {
JPanel c;
public GlassComponent(JPanel c) {
this.c = c;
this.c.addMouseListener(this);
}
...
public mouseEntered(MouseEvent e) {
System.out.println("Entered JPanel");
}
}
説明として、私の目標は最終的に GlassPane を使用して、禁止標識でマークされた要素への入力をブロックすることです。ただし、dialogPanel に割り当てられた mouseListener が、入力要素を離れたときに新しいイベントを生成しているように見えることを考えると、これを実現するのは難しいかもしれません。