1. ホーム
  2. java

[解決済み] getSource()とgetActionCommand()

2022-02-04 20:24:10

質問

getSourceとは何ですか?また、何を返すのですか?

getActionCommand() とは何か、何を返すのか?

私はこれらの2つの間で混乱している誰か私にそれらを与えるか、または区別することができますか? UIのgetSourceとgetActionCommand()の用途は何ですか?特にTextFieldまたはJTextField?

どのように解決するのですか?

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

getActionCommand() は、アクションコマンドを表す文字列を与えます。この値はコンポーネントによって異なります。 JButton で値を設定するオプションがあります。 setActionCommand(String command) しかし JTextField を設定しないと、自動的にテキストフィールドの値が入力されます。javadoc によると、これは java.awt.TextField .

getSource() が指定されています。 EventObject というクラスがあります。 ActionEvent の子である (via. java.awt.AWTEvent ). これにより、そのイベントが発生したオブジェクトへの参照が得られます。

編集する

以下はその例です。2つのフィールドがあり、一方にはアクションコマンドが明示的に設定され、もう一方には設定されていません。それぞれにテキストを入力し、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);
  }

}