JavaのGUIコードに問題があるようですが、なぜ機能しないのかわかりません。
発生する必要があるのは、マウスがパネルまたはフレームをクリックしたときです。今のところ、パネルとだけ言いましょう。これは単なるテストであるため、最終的にこのコードは別のGUIコンポーネントに実装されますが、最初にこれを機能させたいと思います。ポップアップメニューを表示し、テキストフィールドにフォーカスを設定する必要があります。次に、ユーザーがEnterキーを押すか、テキストフィールドのフォーカスが失われると、ポップアップメニューが非表示になり、テキストが空白または必要なものにリセットされます。
だからこれは私が書いたものです:
public class Test {
private final JFrame frame = new JFrame();
private final JPanel panel = new JPanel();
private final JPopupMenu menu = new JPopupMenu();
private final JTextField field = new JTextField();
private final Obj obj;
//... constructor goes here
public void test(){
frame.setSize(new Dimension(200,200));
field.setColumns(10);
field.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
obj.method(field.getText());
menu.setVisible(false);
field.setText("");
}
});
field.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {
menu.setVisible(false);
field.setText("");
}
//... focus gained event goes here
});
panel.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
menu.setLocation(e.getX(), e.getY());
menu.setVisible(true);
field.requestFocusInWindow();
}
//... other mouse events go here
});
menu.add(field);
frame.getContentPane().add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
ここに書かれているコードでは、クリックした直後にメニューが自動的に非表示になります。画面上で短時間点滅した後、何もしなくても非表示になります。
の出現を除外するようにコードを変更するとmenu.setVisible(false)
、テキストフィールドにフォーカスが移ることはありません。
これはJPopupMenuの誤用によるものですか?どこが間違っているのですか?
また、mainまたはObjを省略したことにも注意してください。それらは別のファイルにあり、おそらくこの問題には重要ではありません。Obj.method()は何もせず、mainはTestのコンストラクターとtest()メソッドのみを呼び出します。