私のJava GUIコードに問題があるようですが、なぜ動作しないのかわかりません。スイングコンポーネントとawtイベントに関する問題
パネルまたはフレームでマウスをクリックしたときに、何が起こる必要があるのはパネルだけです。これは単なるテストなので、このコードは別の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の悪用によるものですか?どこが間違っていますか?
また、私はメインまたはObjを省略しました。彼らは別のファイルにあり、この問題の重要性はほとんどありません。 Obj.method()は何もせず、mainはTestのコンストラクタとtest()メソッドだけを呼び出します。
ポップアップメニューの目的は何ですか? – user101884
私は、あなたがポップアップメニューにテキストフィールドを持っているのは間違いです。このアプローチの背景には何がありますか?おそらく、これを達成するための別の方法があります... – basszero