JTextField setActionCommand()的目的是什么[如何以编程方式访问它以查找发生事件的单元格?]

时间:2013-10-15 22:00:15

标签: jtextfield

===原始邮编后的编辑日===

这个问题的动机是需要知道单击按钮时11x11网格(JTextField数组)的哪个单元格处于活动状态。我问了错误的问题并且选择了错误的工具(setActionCommand),尽管它当时通过字符串操作起作用。 (我最终选择完全重写了一个令人费解的折磨代码的例子。)

比使用setActionCommand()更好的解决方案是下面的答案使用.setName()。

=============================================== =

我为JTextField cell执行此操作:

cell.setActionCommand("55");

我将cell推送到名为staq的堆栈中,然后将pop推送到具有以下内容的方法中:

JTextField f = staq.pop();      \\ this works fine
System.out.println(f.command);  \\ this gives error mentioned below

错误:“命令在JTextField中拥有私有权限”

f的Netbeans观看窗口中,我能够观看 f.command并且有“55”。但是JTextField没有getCommand,没有getActionCommand, nothing ,它返回一个可能包含“55”的String

所以我问:

(a)setActionCommand

JTextField有什么意义

和/或

(b)你如何得到它的内容?

(上周我通过evt.getComponent().toString()的文本操作得到了“命令”,但JTextField没有getComponent(),也没有任何其他似乎有承诺。)

(我回过头来感​​到愚蠢和沮丧。也许我的设计恰恰是愚蠢的。)

(也许事实上我无法为setActionCommand添加标签,因为我的声誉不是1500 [错过了仅仅1475]是我的线索,我咬的比我可以从错误中咀嚼马车的一部分在前往桥下的大坝之前。)

4 个答案:

答案 0 :(得分:1)

如果将ActionListener添加到此JTextField,则必须实现public void actionPerformed(ActionEvent event)方法。

然后,如果您正在向多个JTextField添加相同的动作侦听器,则可以在actionPerformed中识别它们

event.getActionCommand(),如果你的JTextField是Action的来源,在这种情况下会返回55.

当然,您可以测试您的JTextField(取决于您是否引用了可能是该操作源的所有文本字段):

if (event.getSource().equals(yourJTextField){
 /// implement here how action on JTextField should be handled
}

答案 1 :(得分:1)

考虑添加到跟随侦听器的JTextField时的情况。我可以将同一个侦听器添加到另一个JTextField(其操作命令设置为77)。这种方式在ActionListener中我可以识别哪一个触发了事件。

myTextField.addActionListener(new TestActionListener());
mySecondTextField.addActionListener(new TestActionListener());

public class TestActionListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent event) {
        if(event.getActionCommand().equals("55")){
            //Source of you action is your JTextField
            System.out.println(((JTextField)event.getSource()).getText());
        }
        if(event.getActionCommand().equals("77")){
            //There might be different component having this set to 77 using same ActionListener
        }           

    }

}

答案 2 :(得分:0)

getActionCommand没有JTextField。如果setActionCommand用于为字段设置“ commandstring ”,那么我看到访问该字符串的唯一方法是为此引发KeyPressed事件领域。然后,字符串文字“ command = ”将成为事件getComponent().toString())子字符串

该(非常长)字符串的格式是“ commandstring ”的第一个字符跟在子字符串“ command = ”之后。 “ commandstring ”后面跟一个逗号。如果evt.getComponent().toString())传递给它,下面的代码将完成工作,其中evt是事件参数。

 public String commandToCell(String s){
    int start = s.indexOf("command") + 8;
    int end = s.indexOf(",", start);
    return s.substring(start,end);
  }

然后人们想知道为什么 setActionCommand 首先存在 JTextfield

答案 3 :(得分:0)

要实现识别11x11网格中发生事件的单元格的目标,.setName() JTextField方法怎么样?

static JTextField[][] cells;

...

cells = new JTextField[11][11];

...

cells[i][j] = new JTextField();
cells[i][j].setName("" + Integer.toHexString(i).charAt(0) 
                       + Integer.toHexString(j).charAt(0));

...

staq.push(cells[someRow][someCol]);

...

static JTextField cell;

...

cell = staq.pop();
int row = Integer.parseInt("" + cell.getName().charAt(0), 16);
int col = Integer.parseInt("" + cell.getName().charAt(1), 16);