があり、方法などについての動作を変更するJava/スイングを制御させていただくことが重?

StackOverflow https://stackoverflow.com/questions/66455

  •  09-06-2019
  •  | 
  •  

質問

ほとんどがGUIの使い、制御を含むテキストを取得し、コンテンツ全体の制御を選択します。この場合は無料でご利用いただけタイピングは、完全に置き換え元ます。

例:きスピンを制御することを初期化するの値がゼロになります。いタブでタイプ"1"の値を制御するには1.

Swing、これは当てはまりません。テキストをコントロールが出てきません選択され、カラットを表示一端または他の既存します。続き上記の例:

イングのJSpinnerに、タブのスピン制御、カラットで左折します。きタイプ"1"の値の制御は10です。

このドライブ、(私のユーザー、壁ていただきたいと思いますように変えることはできない。ますます重要なので、そういった変化で世界の新しい動作に適用されJTextField、JPasswordField,JFormattedTextField,JTextArea、JComboBox、JSpinnerです。のいかんを追加FocusAdapter各制御およびオーバーライドのfocusGained()メソッドこの商品につけられたタグ[tm].

いのちや、脆弱です。下さい。

編集:一つ追加の情報がこいことを証明しています。のんを使って生成されうのフォームデザイナー。これは、私が普段かびませんが、コードを書く作成します。できるかという考えを作りたい自ら行ったが、これは手間いを避けなければなりません。

をモットー:すべての良いプログラマは、基本的に踏む。

役に立ちましたか?

解決 4

を読んでからご回答はこれまでに(!) 私の一番外側のJPanel、以下の方法

void addTextFocusSelect(JComponent component){
    if(component instanceof JTextComponent){
        component.addFocusListener(new FocusAdapter() {
                @Override
                public void focusGained(FocusEvent event) {
                    super.focusGained(event);
                    JTextComponent component = (JTextComponent)event.getComponent();
                    // a trick I found on JavaRanch.com
                    // Without this, some components don't honor selectAll
                    component.setText(component.getText());
                    component.selectAll();
                }
            });

    }
    else
    {
        for(Component child: component.getComponents()){
            if(child instanceof JComponent){
                addTextFocusSelect((JComponent) child);
            }
        }
    }
}

本当にうまくいきます。

他のヒント

がんに必要なことは、過去に私のサブクラスの部品がたかったので"を追加した自動清算機能です。例:

public class AutoClearingTextField extends JTextField {
   final FocusListener AUTO_CLEARING_LISTENER = new FocusListener(){
      @Override
      public void focusLost(FocusEvent e) {
         //onFocusLost(e);
      }

      @Override
      public void focusGained(FocusEvent e) {
         selectAll();
      }
   };

   public AutoClearingTextField(String string) {
      super(string);
      addListener();
   }

   private void addListener() {
      addFocusListener(AUTO_CLEARING_LISTENER);      
   }
}

最大の問題はまだ見つかり"良い"にすべての標準のコンストラクタを書かずにオーバーライド.追加したり、強制呼addListenerは最も一般的なアプローチが記載されました。

ノイズに悩まされることもありますContainerEventsトップレベルのコンテナとContainerListeerの存在を検知する新しいウィジェットを追加するフォーカスリスナーをウィジェットが追加されています。(例:場合、コンテナイベントによる追加TextField、それがすべてのフォーカスリスナーを知っているかをすべて選択テキストテキストフィールドです。) 場合にコンテナが追加され、それに必要なものを再帰的に追加のContainerListenerる新しいサブコンテナです。

もしかしたらなmuck約フォーカスリスナーに実際のUIコードではすべて入っていますから、より高いレベル。

しかしこの自分自身のみdabbledからもできるのではないでしょうかを取得し現在ンポーネントを用い:KeyboardFocusManagerがあるstaticメソッドgetCurrentKeyboardFocusManager()) るPropertyChangeListenerを追加する。それらのライブラリの中からを見いだすことができれば、コンポーネントが含まれており、JTextComponentを選択しています。

別のクラスを付けComponentlistenerをご希望のテキストフィールドを記述することができます。全てのフォーカスリスナーの思い通話selectAll()をテキストウィジェットで利益を。

public class SelectAllListener implements FocusListener {
  private static INSTANCE = new SelectAllListener();

  public void focusLost(FocusEvent e) { }

  public void focusGained(FocusEvent e) {
    if (e.getSource() instanceof JTextComponent) {  
      ((JTextComponent)e.getSource()).selectAll();
    }
  };

  public static void addSelectAllListener(JTextComponent tc) {
    tc.addFocusListener(INSTANCE);
  }

  public static void removeSelectAllListener(JTextComponent tc) {
    tc.removeFocusListener(INSTANCE);
  }
}

受け入れるJTextComponentの引数としてこの動作を追加できJTextArea,JPasswordFieldは、ほとんどの場合、他のすべてのテキスト編集コンポーネン。ることが可能になるので、クラスを追加を選択して編集可能なコンボボックスとJSpinnersを行う場合は、制御上のテキストエディタコンポーネントがあります。便利なメソッドで追加:

public static void addSelectAllListener(JSpinner spin) {
  if (spin.getEditor() instanceof JTextComponent) {
    addSelectAllListener((JTextComponent)spin.getEditor());
  }
}

public static void addSelectAllListener(JComboBox combo) {
  JComponent editor = combo.getEditor().getEditorComponent();
  if (editor instanceof JTextComponent) {
    addSelectAllListener((JTextComponent)editor);
  }
}

また、リスナーを削除方法が不要になったらリスナーを含みません外部参考文献、その他のインスタンスができる追加されたコードレビュー行きがよりスムーズになりました。

みんなをComponentlistener書に添えてもかまわないのですが。ついこのComponentlistenerするグローバルに全ての部品にしたいアプリケーション性を高めることが考えられますがこで指向プログラミング(AOP).と技能コード、あるいは一度ご応募フォーカスリスナーすべての部品をインスタンスを生成アなコピー-ペーストの ます。addFocusListener(listener) コードを通して申請..

お面が切片の作成JComponentのサブク追加したいこの動き)追加のフォーカスリスナーを新しく作成されたインスタンス.のAOPアプローチはよりコピー-貼り付けのComponentlistenerを全体コードがすべて単一のコードになりませんが、保守悪夢が決まったら、変更をグローバル行動などを取り除くのリスナー JSpinners.

多くのAOPの枠組みがあります。私のように JBossAOP 以来、100%pure Javaで入手できるかもしれませんが、うち AspectJ.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top