G
Gast
Gast
Hallo,
ich habe das Problem mit der Ereignissweiterleitung von einer Component zu einem JScrollPane, welches für alle Elemente weiter Ereignisse bereit hält.
Dabei bekomme ich aber immer eine Fehlermeldung und der Debugger springt immer zurück in die Ereignissteuerung meiner Component!
Da mein Code ein wenig ist probiere ich mal die wichtigesten Sachen hier zu posten:
Ich sehe meinen Fehler nicht und bin um jede Hilfe dankbar!
Achso, die Fehlermeldung bei sieht immer so aus:
ich habe das Problem mit der Ereignissweiterleitung von einer Component zu einem JScrollPane, welches für alle Elemente weiter Ereignisse bereit hält.
Dabei bekomme ich aber immer eine Fehlermeldung und der Debugger springt immer zurück in die Ereignissteuerung meiner Component!
Da mein Code ein wenig ist probiere ich mal die wichtigesten Sachen hier zu posten:
Code:
// Große Klasse mit allen GUI-Elementen mit Eclipse und einem Plugin zusammengeklickt!
private JScrollPane getEditorBereich() {
if (EditorBereich == null) {
EditorBereich = new JScrollPane();
EditorBereich.setPreferredSize(new Dimension(400, 300));
EditorBereich.setBackground(new Color(238, 238, 238));
EditorBereich.setViewportView(getZeichenBereich()); //Normales JPanel
EditorBereich.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
// mache irgendwas
}
});
EditorBereich.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseMoved(java.awt.event.MouseEvent e) {
setCursorPosition(e.getX(), e.getY());
//Ändert die Beschriftung eines JLabels
}
});
}
return EditorBereich;
}
//Jetzt lege ich auf das JPanel, welches im ViewPort der JScrollPane liegt eine Grafik, diese soll aber trotzdem
//das mouseMoved weitergeben und das MouseClicked Ereignis, denn auf dem JScrollPane sollen allgemeine
//sachen passieren, die von den vielen individuellen Objekten, welche in dem JPanel existieren können
//sozusagen die Erweiterung darstellen!
//Hier ein Auszug aus einem Objekt in kurzer Form:
public class Element extends JLabel implements MouseMotionListener, MouseListener{
// ganzen Implementierungen...
public void mouseClicked(MouseEvent e){
//mache was für dieses Element
redispatchMouseEvent(e);
}
public void mouseMoved(MouseEvent e){
redispatchMouseEvent(e);
}
//Weiterleitung
private void redispatchMouseEvent(MouseEvent e) {
Point spritePoint = e.getPoint();
//Da ich die Struktur nicht ändere:
//Parent = JPanel -> ViewPort -> JScrollPane
//vllt gibts dafür ne elegantere Lösung!
Container container = parent.getParent().getParent();
Point containerPoint = SwingUtilities.convertPoint(this, spritePoint, container);
this.dispatchEvent(new MouseEvent(container, e.getID(), e.getWhen(), e.getModifiers(),
containerPoint.x, containerPoint.y, e.getClickCount(), e.isPopupTrigger()));
}
}
Achso, die Fehlermeldung bei sieht immer so aus:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at sun.awt.windows.WComponentPeer.getLocationOnScreen(Native Method)
at java.awt.Component.getLocationOnScreen_NoTreeLock(Unknown Source)
at java.awt.Component.getLocationOnScreen(Unknown Source)
at javax.swing.SwingUtilities.convertPointToScreen(Unknown Source)
at javax.swing.SwingUtilities.convertPoint(Unknown Source)
at SpriteOriginalElement.redispatchMouseEvent(Element.java:73)
at SpriteOriginalElement.mouseClicked(Element.java:50)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)