[英]Event listener in Java without app having focus? (Global keypress detection)
[英]Java Focus Event Listener
我想知道如何添加一個焦點獲得的事件監聽器。
目前我有一個鼠標事件被添加到我的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");
}
}
}
要處理焦點事件,處理程序需要實現FocusListener
接口而不是EventListener
。 請注意,您需要通過addFocusListener
添加此處理程序。 我不認為你這樣做了,因為如果你這樣做了,你會得到一個編譯器錯誤,表明錯誤。
使用@Override
注釋有助於發現此類錯誤。 將它放在您認為應該覆蓋父方法的每個方法之上。 如果這樣的方法實際上沒有覆蓋另一個方法,編譯器將拋出一個錯誤。 通過這種方式,您可以了解錯誤,而不是您的程序無聲地失敗。
你應該向控件JTextArea
添加一個event-listener
,然后它才能處理任何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
。
謝謝。
我想這正是你需要的......
只是一個提示:你的類genFocus(更喜歡遵循代碼約定:GenFocus)應該實現FocusListener。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.