JPopUpMenu in einem JTree ist lahm

  • Themenstarter Themenstarter Chris##
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
C

Chris##

Gast
Hallo,
hat jemand eine Ahnung welche Gründe es haben könnte, warum das PopUpmenü über einem JTree, bzw über einer Node recht lahm ist? Ein viel nervigeres Poblem ist allerdings, dass das Popupmenu nur halb dargestellt wird, bzw der Name der Action aabgeschnitten wird.

Hier der Code:

Code:
class PopupTrigger extends MouseAdapter 
    {
        EventTree tree = EventTree.this;
        
        public void mousePressed(MouseEvent e)
        {
            mouseReleased(e);
        }
        
        public void mouseReleased(MouseEvent e) 
        {
            if (e.isPopupTrigger() || e.getButton() == MouseEvent.BUTTON3)
            {
                int x = e.getX();
                int y = e.getY();
                
                TreePath path = tree.getPathForLocation(x, y);
                if (path == null)
                  return;
                
                if (tree.isExpanded(path))
                {
                    expandAction.putValue(Action.NAME, "Collapse");
                    expandAction.putValue(Action.SMALL_ICON, IIcons.up);
                }
                else
                {
                    expandAction.putValue(Action.NAME, "Expand");
                    expandAction.putValue(Action.SMALL_ICON, IIcons.down);
                }

                
                switch (getKindofTreeNode())
                {                
                  case 0: 
                  {
                      treeAction.putValue(Action.NAME,"New Event");
                      treeAction.putValue(Action.SMALL_ICON, IIcons.event);
                      break;
                  }
                  case 1:
                  {
                     treeAction.putValue(Action.NAME,"New Members");
                     treeAction.putValue(Action.SMALL_ICON, IIcons.member);
                     break;
                  }
                  case 2:
                  {
                      treeAction.putValue(Action.NAME,"New Date");
                      break;
                  }
                  case 3:
                  {
                      treeAction.putValue(Action.NAME,"New Type");
                      break;
                  }                
                         
                }
                
                tree.setSelectionPath(path);                
                pop.show(tree, x, y);
                clickedPath = path;
            }
        }
    }
 
Hm, kann es sein, dass diese Sache da in einem eigenen Thread laufen sollte ?
Mist, überhaupt keine Ahnung wie das geht :bloed:
 
Das popup Menü selbst in keine Fall.
Keine Ahnung was der restliche Code macht, aber wenn es zeitintensiv ist, muss es in einen anderen Thread
 
Wildcard hat gesagt.:
..Keine Ahnung was der restliche Code macht, aber wenn es zeitintensiv ist, muss es in einen anderen Thread
Um das Popup zu zeigen musst du imho schon im Eventdispatching Thread bleiben.
Ein zeitintensiver Code dürfte weiter keine Auswirkungen haben, ausser dass das Popup sich etwas verzögert.
 
André Uhres hat gesagt.:
Um das Popup zu zeigen musst du imho schon im Eventdispatching Thread bleiben.
Ein zeitintensiver Code dürfte weiter keine Auswirkungen haben, ausser dass das Popup sich etwas verzögert.
Was exakt das Problem des OP ist :wink:
 
Wildcard hat gesagt.:
André Uhres hat gesagt.:
Um das Popup zu zeigen musst du imho schon im Eventdispatching Thread bleiben.
Ein zeitintensiver Code dürfte weiter keine Auswirkungen haben, ausser dass das Popup sich etwas verzögert.
Was exakt das Problem des OP ist :wink:
Nicht ganz:
Chris## hat gesagt.:
..Ein viel nervigeres Poblem ist allerdings, dass das Popupmenu nur halb dargestellt wird, bzw der Name der Action abgeschnitten wird..
 
Darüber würde ich mir erst Gedanken machen falls ein seperater Thread das andere Problem nicht löst.
 
genau, da der Baum mit Serverdaten aufgefüllt wird, kann man darüber hinwegsehen, dass eben manchmal das popup leicht verzögert wird.
Aber wie man sieht, ändert sich je nach NodeSelection die Actionbeschriftung auf dem Popup. Manchmal funzt es gleich, meistens aber erst,
nachdem ich den Knoten ein 2. mal angeklickt habe. Also ich habe keine PrefferedSize gesetzt und auch sonst nirgends wo ein aufruf der mit
repaint, validate oder ähnliches zu tun hat.
 
Was soll denn sowas?

Code:
public void mousePressed(MouseEvent e)
        {
            mouseReleased(e);
        }

Wenn du deinen Code 30 Myriarden Male, während irgendein Button gedrückt ist, ausführen lässt, wird er sicher nicht schneller...
 
ok, keine ahnung das ist aus den sun tutorials entnommen, aber daran liegt es nicht..

Code:
class PopupListener extends MouseAdapter {
    public void mousePressed(MouseEvent e) {
        maybeShowPopup(e);
    }

    public void mouseReleased(MouseEvent e) {
        maybeShowPopup(e);
    }

    private void maybeShowPopup(MouseEvent e) {
        if (e.isPopupTrigger()) {
            popup.show(e.getComponent(),
                       e.getX(), e.getY());
        }
    }
}

Ich probiere mal so eine KSKSFKKG9 Beispiel zu erstellen
 
ähmm tatsächlich. wenn ich diesen Quatsch hier weglassen, funzt es mit dem pop up.. :-/
Code:
 public void mousePressed(MouseEvent e) {
            mouseReleased(e);
 }
 
lass mal das || e.getButton() == MouseEvent.BUTTON3 weg, dann solltest du den mouseReleased() aufruf in mousePressed() auch drinlassen können, der ja durchaus sinn macht, aber nicht wenn mann noch auf || e.getButton() == MouseEvent.BUTTON3 überprüft. isPopupTrigger() reicht und mehr is eigentlich falsch 😉
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben