web-dev-qa-db-ja.com

getSource()およびgetActionCommand()

GetSourceとは何ですか?そしてそれは何を返しますか?

そして、getActionCommand()とは何ですか?それは何を返しますか?

誰も私にそれらを与えたり区別したりできますか? UIのgetSourceとgetActionCommand()の使用は何ですか?具体的にはTextFieldまたはJTextField?

18
user962206

ActionEvent クラスについて話していると仮定すると、2つのメソッドには大きな違いがあります。

getActionCommand()は、アクションコマンドを表す文字列を提供します。値はコンポーネント固有です。 JButtonの場合、setActionCommand(String command)で値を設定するオプションがありますが、JTextFieldの場合、これを設定しない場合、自動的にテキストフィールド。 javadocによると、これはJava.awt.TextFieldとの互換性のためです。

getSource()は、EventObjectが(Java.awt.AWTEventを介して)の子であるActionEventクラスによって指定されます)。これにより、イベントの発生元のオブジェクトへの参照が提供されます。

編集:

以下に例を示します。 2つのフィールドがあり、1つには明示的に設定されたアクションコマンドがあり、もう1つにはありません。それぞれにテキストを入力し、Enterキーを押します。

public class Events implements ActionListener {

  private static JFrame frame; 

  public static void main(String[] args) {

    frame = new JFrame("JTextField events");
    frame.getContentPane().setLayout(new FlowLayout());

    JTextField field1 = new JTextField(10);
    field1.addActionListener(new Events());
    frame.getContentPane().add(new JLabel("Field with no action command set"));
    frame.getContentPane().add(field1);

    JTextField field2 = new JTextField(10);
    field2.addActionListener(new Events());
    field2.setActionCommand("my action command");
    frame.getContentPane().add(new JLabel("Field with an action command set"));
    frame.getContentPane().add(field2);


    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(220, 150);
    frame.setResizable(false);
    frame.setVisible(true);
  }

  @Override
  public void actionPerformed(ActionEvent evt) {
    String cmd = evt.getActionCommand();
    JOptionPane.showMessageDialog(frame, "Command: " + cmd);
  }

}
18
Qwerky

getActionCommand()

このアクションに関連付けられたコマンド文字列を返します。この文字列により、「モーダル」コンポーネントは、その状態に応じて、いくつかのコマンドの1つを指定できます。たとえば、1つのボタンで「詳細の表示」と「詳細の非表示」を切り替えることができます。ソースオブジェクトとイベントはいずれの場合も同じですが、コマンド文字列は目的のアクションを識別します。

IMO。これは、単一のコマンドコンポーネントがその状態に基づいて異なるコマンドを実行する場合に役立ちます。このメソッドを使用すると、ハンドラーは適​​切なコード行を実行できます。

JTextFieldには JTextField#setActionCommand(Java.lang.String) メソッドがあり、このメソッドを使用して、生成されるアクションイベントに使用するコマンド文字列を設定できます。

getSource()

戻り値:イベントが最初に発生したオブジェクト。

getSource()を使用してコンポーネントを識別し、アクションリスナー内の対応するコード行を実行できます。したがって、コマンドコンポーネントごとに個別のアクションリスナーを記述する必要はありません。また、コンポーネント自体への参照があるため、イベントの結果としてコンポーネントに変更を加える必要がある場合に使用できます。

イベントがJTextFieldによって生成された場合、ActionEvent#getSource()JTextFieldインスタンス自体への参照を提供します。

9
Bhesh Gurung

GetActionCommand()を使用してボタンを聞きます。イベントがevent.getActionCommand( "ボタンのsetActionCommand()値")で実行されるたびに聞こえるように、各ボタンにsetActionCommand()を適用します。

たとえば、JRadioButtonsにはgetSource()を使用します。各JRadioButtonを返すメソッドを記述するので、リスナークラスでは、新しいJRadioButtonが押されるたびにアクションを指定できます。たとえば、次のとおりです。

public class SeleccionListener implements ActionListener, FocusListener {}

これにより、ボタンイベントとradioButtonsイベントを聞くことができます。以下は、それぞれを聞く方法の例です。

public void actionPerformed(ActionEvent event) {
    if (event.getActionCommand().equals(GUISeleccion.BOTON_ACEPTAR)) {
        System.out.println("Aceptar pressed");
    }

この場合、GUISeleccion.BOTON_ACEPTARは、JButtonAceptar.setActionCommand(BOTON_ACEPTAR)で使用される「public static final String」です。

public void focusGained(FocusEvent focusEvent) {
    if (focusEvent.getSource().equals(guiSeleccion.getJrbDat())){
        System.out.println("Data radio button");
    }

これでは、ユーザーがヒットしたときにフォーカスされるJRadioButtonのソースを取得します。 guiSeleccion.getJrbDat()は、GUISeleccionクラス(これはフレームです)にあるJRadioButtonへの参照を返します

1
QuiteSure

GetActionCommand()メソッドは、setActionCommand()を介して設定されたそのコンポーネントに関連付けられたストリングを返しますが、getSource()メソッドは、イベントのソースを指定するObjectクラスのオブジェクトを返します。

0
PENNY