getSource() 和 getActionCommand()
什么是 getSource?它返回什么?
什么是getActionCommand()以及它返回什么??
我对这两者感到困惑,任何人都可以给我或区分它们吗?getSource 和 getActionCommand() 在 UI 中有什么用?特别是TextField还是JTextField?
什么是 getSource?它返回什么?
什么是getActionCommand()以及它返回什么??
我对这两者感到困惑,任何人都可以给我或区分它们吗?getSource 和 getActionCommand() 在 UI 中有什么用?特别是TextField还是JTextField?
假设您正在谈论 ActionEvent
类,那么这两种方法之间存在很大差异。
getActionCommand()
给你一个字符串来表示操作命令。该值是特定于组件的;对于 a,您可以选择设置值,但对于 a,如果您不设置此值,它将自动为您提供文本字段的值。根据javadoc的说法,这是为了与 兼容。JButton
setActionCommand(String command)
JTextField
java.awt.TextField
getSource()
由 (via ) 的子类指定。这将为您提供对事件来源的对象的引用。EventObject
ActionEvent
java.awt.AWTEvent
编辑:
下面是一个示例。有两个字段,一个具有显式设置的操作命令,另一个没有。在每个中键入一些文本,然后按回车键。
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);
}
}
返回与此操作关联的命令字符串。此字符串允许“模式”组件根据其状态指定多个命令之一。例如,单个按钮可能会在“显示详细信息”和“隐藏详细信息”之间切换。在每种情况下,源对象和事件都是相同的,但命令字符串将标识预期的操作。
IMO,这很有用,如果你一个命令组件根据其状态触发不同的命令,使用这种方法,你的处理程序可以执行正确的代码行。
JTextField
具有 JTextField#setActionCommand(java.lang.String)
方法,可用于设置用于其生成的操作事件的命令字符串。
Returns:最初发生事件的对象。
我们可以使用它来标识组件并在操作侦听器中执行相应的代码行。因此,我们不需要为每个命令组件编写单独的操作侦听器。由于您具有对组件本身的引用,因此,如果需要由于事件而对组件进行任何更改,则可以这样做。getSource()
如果事件是由 生成的,则 将为您提供对实例本身的引用。JTextField
ActionEvent#getSource()
JTextField