目前我正在研究我们组第一学期考试项目的GUI部分, 我遇到了一个有趣的问题,
一个有点离题的话题:我仔细地搜寻了这个非常困难的话题, 但实在找不到任何在爪哇使用回调的具体例子, 所以从我所收集的信息来看... 从定义上说... 我在这里做什么其实是一个回调( 如果你能解释原因, 或者指给我一个能彻底解释原因的页面的话, 这会很棒 )
这里的代码是:
private FocusListener callback = new FocusListener(){
@Override public void focusGained(FocusEvent e){
if(hasBeenSet){}else{tfield.setText("");hasBeenSet=true;}
} @Override public void focusLost(FocusEvent e){}};
...
tfield = new JTextField("Insert CPR number", 8);
constraint.gridx = 0;
constraint.gridy = 1;
constraint.gridwidth = 2;
panel.add(tfield, constraint);
tfield.addFocusListener(callback);
tfield = new JTextField("Type new password", 8);
constraint.gridx = 0;
constraint.gridy = 2;
panel.add(tfield, constraint);
tfield.addFocusListener(callback);
tfield = new JTextField("Retype new password", 8);
constraint.gridx = 0;
constraint.gridy = 3;
panel.add(tfield, constraint);
tfield.addFocusListener(callback);
当我启动 GUI 时, 它有三(3) 个文本字段, 想法是当用户聚焦于文本字段时删除文本。 这应该适用于所有三个文本字段, 但显然, 无论您点击哪个文本字段, 只有最后一个文本字段会被设置为空字符串 。 我对此非常好奇, 因为每个对象都是个别即时的 。
很明显,这里的工作就是把tfield改名为“tfield[1-3]”,但如果你能用这个来逗我:
请注意, GUI 代码实际上都在构建器中。 是的, 我知道这完全是荒谬的, 但我们的设计显示, 所有逻辑和数据处理都会在构建器完成后发生... 所以这里不应该有威胁, 但我不知道这是否会与 Focus Reasoner 的回调方法发生冲突 。
谢谢。 :)
P. S. 对于“ 重新输入新密码” 字段, 我承认 JComponent JPassword Field, 这个问题解决后, 将会更改。 所以不需要安全警告 :)