4

私は現在 Java と Swing を学んでおり、教育目的で簡単なプログラムを開発しようとしています。

そこで質問です。

フレームにデフォルトのテキストを含むグリッドレイアウトとフィールドがあります

        accNumberField = new JTextField("0", 10);
    accNumberField.addFocusListener(new FocusListener() {
        int focusCounter = 0;
        @Override
        public void focusGained(FocusEvent arg0) {
            // TODO Auto-generated method stub
            if (focusCounter > 0)
            accNumberField.setText("");
            focusCounter++;
        }

私が望むのは、ユーザーが初めてフィールドをクリックすると、デフォルトのテキストが消えることです。そこで、フォーカス リスナーを追加し、accNumberField.setText(""); を使用しました。in focusGained メソッド。

しかし、問題は、私のフレームのデフォルトの最初のフィールドが、フレームの作成時にフォーカスを得ることです。そして、デフォルトのテキストは最初から消えています。ご覧のとおりカウンターを使用しました。しかし、それは私が望んでいたことではありません。

作成時にフィールドがフォーカスされないようにし、ユーザーがいずれかをクリックしたときにすべてのフィールドがフォーカスされるようにしたいと考えています。

スペルが間違っていたらごめんなさい。英語は私の母国語ではありません。

4

2 に答える 2

2

必要な機能のコード例、Java JTextField と入力ヒントを含むスレッドが見つかりました。JTextField正確には、そのために特別に作成されたフィールドに「デフォルトテキスト」を保持する独自の実装を提供する必要があります。

2 番目の質問では、フォーカスを一部buttonまたはframeそれ自体に設定できます。

于 2012-09-20T08:38:35.717 に答える
2

focusListener() を使用する理由はありますか? 次のように mouseListener() を使用しないのはなぜですか?

    accNumberField.addMouseListener(new MouseAdapter()
    {
        @Override
        public void mouseReleased(MouseEvent e)
        {
            accNumberField.setText("");
        }
    });

最初のクリックでテキストをクリアしたい場合は、単純にブール値を使用できます。

    //outside constructor
    private boolean isTextCleared = false;

    //in constructor
    accNumberField.addMouseListener(new MouseAdapter()
    {
        @Override
        public void mouseReleased(MouseEvent e)
        {
            if (!isTextCleared)
            {
                accNumberField.setText("");
                isTextCleared = true;
            }
        }
    });
于 2012-09-20T08:31:26.100 に答える