===原始邮编后的编辑日===
这个问题的动机是需要知道单击按钮时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]是我的线索,我咬的比我可以从错误中咀嚼马车的一部分在前往桥下的大坝之前。)
答案 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);