1

コンボ ボックスにフォーカス リスナーを実装する方法がわかりません。簡単なことではないことは理解していますが、他の人がそれを機能させているようです[1] [2] [3]。Web 全体を広範囲に検索し、最新のOracle ガイドOracle ドキュメントなどをチェックした後、ここに来ました。私の質問は簡単です:

フォーカスリスナーをコンボボックスに追加することは可能ですか?

目標は、基本的に Google 検索と同じフィールドを作成することです。検索クエリを入力すると、テキスト フィールドの下にドロップダウンが表示され、可能な検索結果が表示されます。他のすべてが失敗した場合は、コンボボックスとテキストフィールドの両方を重ねて、ある種の精巧な可視性の切り替えをセットアップしますが、私はしたくない...

使用:
Java 1.7.0_21 (←補足: このテキストをイタリック体にするために、このアンダースコアをエスケープする必要があるのはなぜですか?アンダースコアは何をしますか?)
Windows 7 x64

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JComboBox;
import javax.swing.JTextField;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;

public class focustest extends JFrame {

    private JPanel contentPane;
    private JTextField textField;
    public focustest theframe;
    
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                focustest theframe = new focustest();
                theframe.setVisible(true);
            }
        });
    }

    public focustest() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 106);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
        JComboBox comboBox = new JComboBox();
        comboBox.addFocusListener(new FocusAdapter() {
            @Override
            public void focusGained(FocusEvent arg0) {
                JOptionPane.showMessageDialog(theframe, "focus gained!", null,JOptionPane.PLAIN_MESSAGE);
            }
            @Override
            public void focusLost(FocusEvent arg0) {
                JOptionPane.showMessageDialog(theframe, "focus lost!", null,JOptionPane.PLAIN_MESSAGE);
            }
        });
        comboBox.setEditable(true);
        contentPane.add(comboBox, BorderLayout.NORTH);
        textField = new JTextField();
        contentPane.add(textField, BorderLayout.SOUTH);
        textField.setColumns(10);
    }
    
}
4

1 に答える 1