2

===在原始帖子后编辑几个月===

这个问题的动机是需要知道单击按钮时 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 中具有私有访问权限”

在 Netbeans 的观察窗口中f,我可以看到 f.command并且有“55”。但是没有getCommand,没有getActionCommand,什么都没有返回JTextField一个String可能包含“55”的值。

所以我要问:

setActionCommand(a)有什么意义JTextField

和/或

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

(上周我能够通过文本操作获得“命令”,evt.getComponent().toString()但没有 getComponent() forJTextField也没有其他任何东西似乎有希望。)

(我又回到了愚蠢和沮丧的状态。也许我的设计就是愚蠢的。)

(也许我无法为 setActionCommand 添加标签,因为我的声誉不是 1500 [仅仅错过了 1475],这就是我的线索,我从错误的部分咬得比我能咀嚼的更多马在驶过桥下大坝的马车前。)

4

4 回答 4

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
        }           

    }

}
于 2013-10-16T08:37:26.993 回答
1

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

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

event.getActionCommand() 如果您的 JTextField 是操作的源,则在这种情况下将返回 55。

当然,您也可以通过以下方式测试您的 JTextField(取决于您是否引用了可能是操作来源的所有文本字段):

if (event.getSource().equals(yourJTextField){
 /// implement here how action on JTextField should be handled
}
于 2013-10-15T22:04:44.580 回答
0

没有。getActionCommand_ JTextField如果setActionCommand用于为该字段设置“命令字符串”,我见过的访问该字符串的唯一方法是KeyPressed为该字段引发事件。然后,字符串文字“ command= ”将是事件的子字符串getComponent().toString())

该(非常长的)字符串的格式是这样的,“ commandstring ”的第一个字符跟在子字符串“ command= ”之后。“命令字符串”后跟一个逗号。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 a JTextfield

于 2013-10-16T01:04:15.840 回答
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);
于 2014-05-27T20:43:29.147 回答