Ok,
hab nun alles soweit, mein einziges(, vorerst letztes ) Problem ist:
Wie kann ich allen Components den Listener zuweisen, ohne es von Hand zu machen? Bei teilweise 200 Components keine schöne aufgabe... das ganze dann bei X anwendungen...
Ich will dem JFrame/this einfach den Listener zuweisen und dann sollen alle Components im JFrame sich den vom JFrame holen, geht das?
Hier mal meine Listener-Klasse:
Code:
public class FrameListener implements MouseMotionListener, ActionListener, KeyListener, MouseListener {
// Besitzer des Listeners
Frame ownerFrame = null;
// Die Component, über der die Maus gerade steht
Component objHoverComponent = null;
// X-Position der Maus
private int intXPosition = 0;
// Y-Position der Maus
private int intYPosition = 0;
/**
* Standardkonstruktur
*
* @param p_Frame
* p_Frame Der Frame wird übergeben, da die getComponentAt(x,y)
* Methode aufgerufen wird. Diese benötigt den Frame, von dem aus
* die Methode aufgerufen werden soll
*/
public FrameListener(Frame p_Frame) {
// ownerFrame setzen
ownerFrame = p_Frame;
}
public void mouseClicked(MouseEvent e) {
// System.out.println("FrameListener -> mouseClicked()");
}
public void mouseEntered(MouseEvent e) {
// System.out.println("FrameListener -> mouseEntered()");
}
public void mouseExited(MouseEvent e) {
// System.out.println("FrameListener -> mouseExited()");
}
public void mousePressed(MouseEvent e) {
// System.out.println("FrameListener -> mousePressed()");
}
public void mouseReleased(MouseEvent e) {
// System.out.println("FrameListener -> mouseReleased()");
}
public void keyPressed(KeyEvent e) {
// System.out.println("FrameListener -> keyPressed()");
}
public void keyReleased(KeyEvent e) {
// System.out.println("FrameListener -> keyReleased()");
}
public void keyTyped(KeyEvent e) {
// System.out.println("FrameListener -> keyTyped()");
}
public void mouseDragged(MouseEvent e) {
// System.out.println("FrameListener -> actionPerformed()");
}
public void mouseMoved(MouseEvent e) {
System.out.println("FrameListener -> mouseMoved()" + e.getX() + "x" + e.getY() + "C:" + e.getComponent());
// Componente sichern, die sich momentan unter der
// Maus befindet
objHoverComponent = e.getComponent();
// X-Position der Maus sichern
this.intXPosition = e.getX();
// Y-Position der Maus sichern
this.intYPosition = e.getY();
}
public void actionPerformed(ActionEvent e) {
getComponent(objHoverComponent);
}
public void getComponent(Component p_Component) {
// Die Component, die als Root-Stamm angezeigt werden soll
Component t_ComponentRoot = ownerFrame.getComponentAt(intXPosition, intYPosition);
// dlgShowAppComponents-Dialog erstellen
dlgShowAppComponents dlgShowAppComponents = new dlgShowAppComponents(ownerFrame, new BO_StartParameter(), t_ComponentRoot, null, p_Component);
// Dialog anzeigen
dlgShowAppComponents.show();
}
Angewendet wird der Listener nun mit:
Code:
// Instanz-Variable des Listeners erstellen
final FrameListener objFrameListener = new FrameListener(this);
// KeyStroke erstellen STRG+F9
final KeyStroke keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_F9, InputEvent.CTRL_DOWN_MASK, true);
Folgendes muss ich nun pro Component machen (was ich sehr mühsam finde, wenn es 100-200Components sind...):
Code:
// this
this.addMouseMotionListener(objFrameListener);
this.addMouseListener(objFrameListener);
this.addKeyListener(objFrameListener);
addMouseListener kann ich wahrscheinlich zwar auch weg lassen, aber naja.
Es muss doch irgendwie gehen, dass die Components sich die Listener von der übergeordneten Component(JFrame,JDialog) holen, oder ist das unmöglich?
Es wäre schön, wenn die insgesamt 5 Zeilen alles wären, was mich nun zum Ziel bringt
Lesezeichen