2016-10-07 11 views
0

У меня есть Java-апплет (с использованием класса JApplet), и я пытаюсь получить событие, когда окно апплета активировано. Я попытался реализовать WindowListener и FocusListener, но я не получаю никаких событий. Что мне нужно сделать, чтобы выяснить, получил ли окно апплета фокус?Не получать события фокуса или окна в апплете

Вот мой тестовый код:

public class AppletTest extends JApplet implements WindowListener, FocusListener { 
    public void init() { 
//  addWindowListener(this); // Won't compile 
     addFocusListener(this); 
    } 
    public void actionPerformed(ActionEvent event){ 
     Object source = event.getSource(); 
     String command = event.getActionCommand(); 
    } 

    @Override 
    public void focusGained(FocusEvent e) { 
     System.out.println("focusGained"); 
    } 
    @Override 
    public void focusLost(FocusEvent e) {} 

    @Override 
    public void windowActivated(WindowEvent e) { 
     System.out.println("windowActivated"); 
    } 
    // Stub methods 
    @Override 
    public void windowOpened(WindowEvent e) {} 
    @Override 
    public void windowClosing(WindowEvent e) {} 
    @Override 
    public void windowClosed(WindowEvent e) {} 
    @Override 
    public void windowIconified(WindowEvent e) {} 
    @Override 
    public void windowDeiconified(WindowEvent e) {} 
    @Override 
    public void windowDeactivated(WindowEvent e) {} 
} 

ответ

1

Добавление: setFocusable (истинное);

метод init должен исправить вашу проблему.

+0

Это действительно проблема, которую я задал, спасибо! –

+0

Однако в моем производственном коде, который значительно сложнее, это не всегда срабатывает. У меня также есть модельный JPanel в моем апплете. Если один из этих JPanel находится сверху, и я нажимаю на главное окно апплета, событие focusGained не запускается. Есть ли способ получить событие, когда мое главное окно апплета выведено вверху zOrder? –