什么是getSource?它返回什么?
而getActionCommand()又是什么?它返回什么?
我对这两个功能感到困惑,有人可以给我解释一下吗?在UI的TextField或JTextField中,getSource和getActionCommand()有什么用途?
什么是getSource?它返回什么?
而getActionCommand()又是什么?它返回什么?
我对这两个功能感到困惑,有人可以给我解释一下吗?在UI的TextField或JTextField中,getSource和getActionCommand()有什么用途?
ActionEvent
类,那么这两种方法之间存在很大的区别。
getActionCommand()
方法会返回一个代表动作命令的字符串。它的值是组件特定的;对于 JButton
,你可以使用 setActionCommand(String command)
方法设置该值,但是对于 JTextField
,如果你没有设置该值,它将自动给出文本字段的值。根据 javadoc 的说明,这是为了与 java.awt.TextField
兼容性而设计的。
getSource()
方法由 EventObject
类指定,ActionEvent
是该类的子类(通过 java.awt.AWTEvent
)。它会给你一个参考对象,即事件来自哪个对象。
编辑:
这里有一个例子。有两个字段,一个明确设置了操作命令,另一个没有。在每个字段中输入一些文本,然后按 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);
}
}
setActionCommand()
显式设置操作命令,则getActionCommand()
将返回文本字段的内容;即其中输入的任何内容。 - Qwerky返回与此操作关联的命令字符串。该字符串允许“模态”组件根据其状态指定多个命令之一。例如,单个按钮可以在“显示详细信息”和“隐藏详细信息”之间切换。源对象和事件在每种情况下都相同,但命令字符串将标识预期的操作。
在我看来,如果您想要使用单个命令组件根据其状态触发不同的命令,则使用此方法可以使处理程序执行正确的代码行。
JTextField
有一个JTextField#setActionCommand(java.lang.String)
方法,您可以使用它来设置由其生成的操作事件使用的命令字符串。
返回:最初发生事件的对象。
我们可以使用getSource()
来识别组件并在动作监听器中执行相应的代码行。因此,我们不需要为每个命令组件编写单独的动作监听器。并且由于您拥有对组件本身的引用,因此如果需要,可以根据事件对组件进行任何更改。
如果事件是由JTextField
生成的,则ActionEvent#getSource()
将为您提供对JTextField
实例本身的引用。
我使用getActionCommand()来监听按钮。我对每个按钮应用setActionCommand(),以便在执行事件时可以听到event.getActionCommand("按钮的setActionCommand()值")。
例如,对于JRadioButtons,我使用getSource()。我编写返回每个JRadioButton的方法,因此在我的Listener类中,我可以指定每次按下新的JRadioButton时要执行的操作。例如:
public class SeleccionListener implements ActionListener, FocusListener {}
因此,我可以监听按钮事件和单选按钮事件。以下是我如何监听每个事件的示例:
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals(GUISeleccion.BOTON_ACEPTAR)) {
System.out.println("Aceptar pressed");
}
public void focusGained(FocusEvent focusEvent) {
if (focusEvent.getSource().equals(guiSeleccion.getJrbDat())){
System.out.println("Data radio button");
}
在这个例子中,当用户点击具有焦点的任何JRadioButton时,我获取其源代码。guiSeleccion.getJrbDat()返回GUISeleccion类(这是一个Frame)中的JRadioButton的引用。
getActionCommand() 方法通过 setActionCommand() 设置的 Component 返回与其关联的字符串,而 getSource() 方法返回指定事件源的 Object 类的对象。