Einfache Fokus-Listener in Java

Habe ich eine einfache Anwendung mit einem Fenster(erweitert JPanel), die enthält eine kleine box(myMessagePanel - siehe code unten).

Grundsätzlich möchte ich generieren focusevents sowohl das Panel und die box, wenn die box gedrückt wird. Allerdings nur focusGained und focuslost wurde in der Systemsteuerung aufgerufen wird. Hier ist der code:

myMessageBox ist die box -, Panel ist das panel und FocusListenerTest enthält die wichtigsten

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class Panel extends JPanel implements MouseListener, FocusListener {
myMessageBox msgBox;

public Panel() {
    addMouseListener(this);
    addFocusListener(this);
}

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    setBackground(Color.GREEN);
    msgBox = new myMessageBox(g);
    g.dispose();
}

public void focusGained(FocusEvent fe) {
    System.out.println("Focus gained in JPanel");
}

public void focusLost(FocusEvent fe){
    System.out.println("Focus lost in JPanel");
}       

public void mousePressed(MouseEvent me) {
    requestFocus();
    System.out.println("Mouse Pressed in JPanel");
}
public void mouseReleased(MouseEvent me) {}
public void mouseClicked(MouseEvent me) {}
public void mouseEntered(MouseEvent me) {}
public void mouseExited(MouseEvent me) {}
}

class myMessageBox extends Component implements FocusListener, MouseListener{
myMessageBox(Graphics g) {
    addMouseListener(this);
    addFocusListener(this);
    paintComponent(g);
    System.out.println("Done");
}

public void paintComponent(Graphics g) {
    g.fillRect(150,100,100,100);
}

public void mousePressed(MouseEvent me) {
    requestFocus();
    System.out.println("Mouse pressed on box");
}

public void mouseReleased(MouseEvent me) {}
public void mouseClicked(MouseEvent me) {}
public void mouseEntered(MouseEvent me) {}
public void mouseExited(MouseEvent me) {}

public void focusGained(FocusEvent fe){
    System.out.println("Focus gained by box");
}

public void focusLost(FocusEvent fe) {
    System.out.println("Focus lost by box");
}
}

public class FocusListenertest {
public static void main(String args[]) {
    JFrame window = new JFrame();
    Panel content = new Panel();
    window.setContentPane(content);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setLocation(100,75);
    window.setSize(400, 400);
    window.setVisible(true);
}
}

Wenn ich diesen code ausführen, "Focus gained by box" wird nicht gedruckt, wenn die myMessageBox gedrückt wird.

Dank

(PS: nicht Kommentare schreiben, wie es ist eine einfache Anwendung. Bitte lassen Sie mich wissen, wenn Kommentare sind erforderlich)

hinzufügen msgBox zu Panel. Auch Keine Grenzen gesetzt, die für die Komponente.
bitte lernen Sie die java Namenskonventionen halten

InformationsquelleAutor Edwards | 2011-03-19

Schreibe einen Kommentar