tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
1
ZUGRIFFE
486
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    shocking shocking ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    49
    Hi Leute,

    ich habe da folgendes Problem:

    Ich habe eine JScrollPane deren View ein JPanel ist. Dieses JPanel enthält wiederum mehrere JPanel, die wiederum mehrere JTextFields enthalten, so dass der Inhalt größer ist als der sichtbare Bereich der View. Unterhalb der JScrollPane befinden sich ein paar JButtons, die verschiedene Action ausführen.
    Wenn ich nun den Fokus in einem der Textfields habe und dann auf einen der Buttons klicke, soll nach Ausführen der Action der Fokus wieder im vorher fokussierten Textfeld sein.
    Um ein automatisches Scrollen auszuführen habe ich einen ScrollFocusAdapter geschrieben und auf den Textfields platziert:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    public void focusGained(FocusEvent e) {
     
            Component focusedComponent = e.getComponent();
     
            if (!focusedComponent.equals(MainFrame.getInstance().getLastFocusedComponent())) {
     
                // selektiere den Text
                if (focusedComponent instanceof JTextComponent) {
                    ((JTextComponent) focusedComponent).selectAll();
                }
     
                bounds = focusedComponent.getBounds(null);
     
                JPanel parent = getParentPanel(focusedComponent);
                // X soll beim scrollen vernachlaessigt werden. Wir scrollen nur
                // vertikal.
                bounds.x = 0;
     
                parent.scrollRectToVisible(bounds);
                parent.repaint();
    }

    Mein Problem ist, dass wenn das Textfeld z.B. mittig auf dem JPanel platziert ist und ich dann die Action (die in einen eigenen Thread ausgelagert ist wg. Datenbankzugriff) auslöse, scrollt die JScrollPane automatisch ans Ende des Panels. Dann wird die Action ausgeführt und am Ende dann das Setzen des Fokus in das Textfeld wieder erledigt. Dann scrollt die JScrollPane wieder hoch zum Textfeld (durch das focusGained des ScrollAdapters). Dabei entsteht ein hässliches Flackern, weil das nicht schnell genug hintereinander ausgeführt wird.
    WIe kann ich also erreichen, dass die ScrollPane still stehen bleibt beim verlieren des Fokus, und dann auch nur dann scrollt, falls das Feld wirklich außerhalb des sichtbaren Bereichs liegt?


    Vielen Dank
    shocking
     

  2. #2
    shocking shocking ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    49
    Hi,

    also vielleicht interessiert es jemanden, wie ich das Problem gelöst habe...
    Es hat sich herausgestellt, dass das automatische herunterscrollen durch die Methode adjustVisibility im DefaultCaret der TextFields und TextAreas ausgelöst wurde. Ich habe in meinen Textkomponenten jeweils die scrollRectToVisible-Methode überschrieben, so dass diese nichts mehr macht, wenn sie aufgerufen wird. Dadurch wurde das herunterscrollen quasi ausgehebelt. Zudem habe ich meine focusGained-Methode dahingehend geändert, dass diese nur noch scrollt, wenn die bounds nicht im aktuell sichtbaren Rect der ScrollPane liegen...

    Und nun klappt es auch mit dem Nachbarn und auch die einzelnen Threads sind kein Problem mehr.

    Gruß shocking
     

Ähnliche Themen

  1. JTree in JScrollPane: JScrollPane automatisch anpassen
    Von Guadrion im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 14.06.10, 09:12
  2. Scrolling Problem ( removeChild & addChild Problem )
    Von Protip im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 28.02.10, 21:17
  3. Antworten: 0
    Letzter Beitrag: 04.11.09, 18:59
  4. Fading/Scrolling Menü Problem
    Von drella im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 15.06.06, 18:16
  5. UDP Chat Problem mit Textfeld Scrolling
    Von Parasite im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 17.01.03, 18:43

Stichworte