入力要素とは、JSpinnersやJComboxBoxなどのことです。私のglasspaneには、JSpinners、JComboBoxes、そして大部分はJLabelsを含むJPanelが渡されます。 glasspaneにはMouseListenerが添付されています。驚くべきことに、mouseEnteredはマウスカーソル上で入力要素を残して呼び出され、JPanelの他の部分または空の領域の上にカーソルを置いてください!これは正常な動作ですか? GlassPaneの目的のために入力要素をJPanelの一部とみなすにはどうすればよいですか?Glasspaneの目的のために、Swingの入力要素が一見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が入力要素を離れると一見新しいイベントを生成していることを考えると、これを達成するにはいくつかの困難があります。
私の目標を達成するのに役立つように思われるあなたの答えをありがとう。私はデモでredispatchMouseEvent()を見たことがありましたが、今まではその重要性や有用性を認識していませんでした。 +1 – Arvanem
これは、コントロールが適用されないことを伝える斬新な方法であると推測するのは正しいですか? 'setEnabled()'や動的レイアウトも同様ですか? – trashgod
ご意見ありがとうございました。あなたの推論は正しいです。残念ながら、setEnabled()は関連するJComponentsをグレイ表示して、ほとんど判読できないようにします。上記のスクリーンショットは、判読不能を正当化するものではありません。私はGoogleの動的レイアウトにする必要があります。 – Arvanem