我想知道如何添加焦点获取事件监听器。
目前我有一个鼠标事件正在添加到我的 JTextareas
//=======================================================
// mouse drag event
//=======================================================
public static class genDrag extends MouseMotionAdapter {
JTextArea textarea;
// receive textarea as argument
public genDrag(JTextArea argTextarea) {
textarea = argTextarea;
}
// add drag functionality to argument
public void mouseDragged(MouseEvent E) {
Point p = SwingUtilities.convertPoint(textarea, E.getPoint(), gc_gui.cv_content);
textarea.setBounds((p.x - 40), (p.y - 15), 100, 30);
}
}
然后我可以使用
调用 //=======================================================
// apply mouse event
//=======================================================
JTextArea textarea = new JTextArea();
textarea.setBounds(50, 50, 100, 30);
textarea.addMouseMotionListener(new genDrag(textarea));
这工作正常,但我无法重现相同 focusGained事件的功能
//=======================================================
// mouse focus event
//=======================================================
public static class genFocus extends EventListener {
JTextArea textarea;
public genFocus() {
textarea = argTextarea;
}
public void focusGained(FocusEvent E) {
System.out.println("Focus Triggered");
}
}
以上看起来并不高兴
更新代码
static gui classGui;
public static void main(String[] args) {
classGui = new gui();
classGui.textarea.addMouseMotionListener(
new genDrag(classGui.textarea)
);
classGui.textarea.addFocusListener(
new genFocus(this)
);
classGui.frame.setVisible(true);
public static class gui {
JFrame frame;
JPanel panel;
JTextArea textarea;
public gui() {
frame = new JFrame();
// configure JFrame here
panel = new JPanel();
// configure JPanel here
textarea = new JTextArea();
textarea.setBounds(50, 50, 100, 30);
frame.add(textarea);
}
}
public static class genDrag extends MouseMotionAdapter {
JTextArea textarea;
public genDrag(JTextArea argTextarea) {
textarea = argTextarea;
}
public void mouseDragged(MouseEvent E) {
Point p = SwingUtilities.convertPoint(textarea, E.getPoint(), gc_gui.cv_content);
textarea.setBounds((p.x - 40), (p.y - 15), 100, 30);
}
}
public static class genFocus implements FocusListener {
JTextArea textarea;
public genFocus(JTextArea argTextarea) {
textarea = argTextarea;
}
public void focusGained(FocusEvent E) {
System.out.println("Focus gained");
}
public void focusLost(FocusEvent E) {
System.out.println("Focus lost");
}
}
}
答案 0 :(得分:2)
要处理焦点事件,处理程序需要实现FocusListener
接口而不是EventListener
。
请注意,您需要通过addFocusListener
添加此处理程序。我不认为你这样做了,因为如果你这样做了,你会得到一个编译器错误,表明错误。
使用@Override
注释有助于发现此类错误。将它放在您认为应该覆盖父方法的每个方法之上。如果这样的方法实际上没有覆盖另一个方法,编译器将抛出一个错误。通过这种方式,您可以了解错误,而不是您的程序无声地失败。
答案 1 :(得分:1)
您应该向控件event-listener
添加JTextArea
,然后才能处理任何event
请求。
JTextField textarea= new JTextField("Value");
textarea.addFocusListener(new genFocus(textarea)); //this peice of code will add an listener to you textarea Object of JTextField.
您的鼠标侦听器将起作用,因为您已向JTextArea
添加了鼠标事件侦听器。
textarea.addMouseMotionListener(new genDrag(textarea));//code to add MouseMotionListener.
但是FocusEvent
没有注册JTextArea
。
感谢。
答案 2 :(得分:0)
我认为this正是您所需要的......
只是一个提示:你的类genFocus(更喜欢遵循代码约定:GenFocus)应该实现FocusListener。