什么是getSource?它返回了什么?
什么是getActionCommand()以及它返回什么?
我对这两个人之间感到困惑,任何人都可以给予我或将它们区分给我吗?在UI中使用getSource和getActionCommand()有什么用?特别是TextField还是JTextField?
答案 0 :(得分:18)
假设您正在讨论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);
}
}
答案 1 :(得分:9)
返回与此操作关联的命令字符串。此字符串允许“模态”组件根据其状态指定多个命令之一。例如,单个按钮可能会在“显示详细信息”和“隐藏详细信息”之间切换。源对象和事件在每种情况下都是相同的,但命令字符串将标识预期的操作。
IMO,如果您使用单个命令组件根据其状态触发不同的命令,这非常有用,并且使用此方法,您的处理程序可以执行正确的代码行。
JTextField
具有JTextField#setActionCommand(java.lang.String)
方法,您可以使用该方法设置用于由其生成的操作事件的命令字符串。
返回:最初发生事件的对象。
我们可以使用getSource()
来识别组件并在操作侦听器中执行相应的代码行。因此,我们不需要为每个命令组件编写单独的动作侦听器。由于您具有对组件本身的引用,因此您可以根据事件对组件进行任何更改。
如果事件是由JTextField
生成的,那么ActionEvent#getSource()
将为您提供对JTextField
实例本身的引用。
答案 2 :(得分:1)
我使用getActionCommand()来听按钮。我将setActionCommand()应用于每个按钮,以便每当使用event.getActionCommand("按钮")的setActionCommand()值执行事件时,我都能听到。
例如,我为JRadioButtons使用getSource()。我编写了返回每个JRadioButton的方法,所以在我的Listener类中,我可以在每次按下新的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 void focusGained(FocusEvent focusEvent) {
if (focusEvent.getSource().equals(guiSeleccion.getJrbDat())){
System.out.println("Data radio button");
}
在这一篇中,我得到了当用户点击它时聚焦的任何JRadioButton的源代码。 guiSeleccion.getJrbDat()返回对GUISeleccion类中的JRadioButton的引用(这是一个Frame)
答案 3 :(得分:0)
getActionCommand()方法通过setActionCommand()返回与该Component集关联的String,而getSource()方法返回Object类的Object,指定事件的来源。