1

テキストフィールドをクリックすると、そこに入力された最近のテキストがクリアされる可能性はありますか? 私は、これらがテキストフィールドだとします。

   Name: Last Name     First Name      Middle Initial

次に、姓をクリックすると、名とミドルネームのイニシャルと同じようにクリアされます。読んでくれてありがとう、あなたが私を助けてくれることを願っています。

4

3 に答える 3

6

すべてのテキストが選択されている FocusListener を考えてみましょう。

myTextField.addFocusListener(new FocusAdapter() {
  public void focusGained(FocusEvent fEvt) {
    JTextField tField = (JTextField)fEvt.getSource();
    tField.selectAll();
  }
});

すべてのテキストを選択することにより、ユーザーは入力して現在のテキストを削除して新しいテキストに置き換えるか、マウスまたは矢印キーを使用して現在のテキストを保持し、場合によっては変更するかを選択できます。

于 2012-10-07T03:34:51.187 に答える
1

ホバークラフトは正しいと思います。FocusListenerこの目的には a を使用することをお勧めします。

これに対処できるユーティリティ クラスを作成します。自動選択についても同様のことを行いました。つまり、すべてのテキスト コンポーネントを拡張したり、同じことを行う小さなフォーカス リスナーを失ったりする必要はありません。

public class AutoClearOnFocusManager extends FocusAdapter {

    private static final AutoClearOnFocusManager SHARED_INSTANCE = new AutoClearOnFocusManager();

    private AutoClearOnFocusManager() {

    }

    public static AutoClearOnFocusManager getInstance() {
        return SHARED_INSTANCE;
    }

    @Override
    public void focusGained(FocusEvent e) {
        Component component = e.getComponent();
        if (component instanceof JTextComponent) {
            ((JTextComponent)component).setText(null);
        }
    }

    public static void install(JTextComponent comp) {
        comp.addFocusListener(getInstance());
    }

    public static void uninstall(JTextComponent comp) {
        comp.removeFocusListener(getInstance());
    }        
}

次に、使用するだけです

JTextField textField = new JTextField("Some text");
AutoClearOnFocusManager.install(textField);

「プロンプト」(ユーザーにプロンプ​​トを表示するフィールド内のテキスト) を提供するだけの場合は、Prompt APIを参照することもできます。

于 2012-10-07T03:44:13.657 に答える
0

なぜmouseClickedイベントを使わないのですか?

だから、あなたは次のようなものを持つことができます

jTextFieldMyText.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mouseClicked(java.awt.event.MouseEvent evt) {
        jTextFieldMyTextMouseClicked(evt);
    }
});

private void jTextFieldMyTextMouseClicked(java.awt.event.MouseEvent evt) {
    jTextFieldMyText.setText("");
}

フォーカスの場合

jTextFieldMyText.addFocusListener(new java.awt.event.FocusAdapter() {
    public void focusGained(java.awt.event.FocusEvent evt) {
        jTextFieldMyTextFocusGained(evt);
    }
});

private void jTextFieldMyTextFocusGained(java.awt.event.MouseEvent evt) {
    jTextFieldMyText.setText("");
}

テキストをすぐに削除したくない場合は、提案されているselectAll()代わりに何度も使用してくださいsetText("")

于 2012-10-07T03:32:30.703 に答える