Announcement

Collapse
No announcement yet.

JScrollpane scrollt nicht mehr wenn..

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • JScrollpane scrollt nicht mehr wenn..

    Hallo,

    ich habe momentan das Problem, dass die JScrollpane nicht mehr scrollt sobald ich auf einer Kindkomponente innerhalb des Scrollpanes einen MouseWheelListener hinzufüge.

    Kennt zufällig jemand das Problem und evtl. sogar einen Workaround? Kann ich das Event das ich da abfange irgendwie manuell weiterreichen oder sogar einfach einen Schalter umlegen damit das wieder funktioniert?

    Bsp:

    panel.addMouseWheelListener(new MouseWheelListener(){
    public void mouseWheelMoved(MouseWheelEvent e) {

    }

    });
    panel.setLayout(new GridLayout(2,1));
    JScrollPane sp = new JScrollPane(panel);




    Viele Grüße,
    Felix

  • #2
    Habe hier mal eine Scrollpane genommen, da ein Panel reingelegt und in das Panel eine Table. Dann an das Panel den Listener gebunden.

    Sowohl der Listener kriegt sein Event und auch die JTable scrollt. Kein Fehler festzustellen.
    Christian

    Comment


    • #3
      JScrollpane scrollt nicht mehr wenn..

      Hallo,

      danke für die Antwort. Mit welcher Java-Version wurde das getestet? Ich versuch mein Beispiel mal komplett hier reinzustellen.

      Gruß,
      Felix

      Comment


      • #4
        Javaversion 1.6
        Christian

        Comment


        • #5
          JScrollpane scrollt nicht mehr wenn..

          Hallo nochmal,

          das Folgende ist mein komplettes Beispiel. Ist der Listener registriert kann ich nicht scrollen, ist er nicht registriert funktioniert es wieder.


          import java.awt.BorderLayout;
          import java.awt.Color;
          import java.awt.Container;
          import java.awt.GridLayout;
          import java.awt.event.MouseWheelEvent;
          import java.awt.event.MouseWheelListener;
          import java.awt.event.WindowAdapter;
          import java.awt.event.WindowEvent;

          import javax.swing.JFrame;
          import javax.swing.JPanel;
          import javax.swing.JScrollPane;
          import javax.swing.JTextArea;
          import javax.swing.JTextField;


          public class TinyGuiTest {

          public static void main(String[] args) {
          new TinyGuiTest().start();
          }

          private JFrame frame;

          private void start(){
          frame = new JFrame();
          frame.addWindowListener(new WindowAdapter(){
          public void windowClosing(WindowEvent e) {
          System.exit(0);
          }
          });
          Container pane = frame.getContentPane();
          pane.setLayout(new BorderLayout());

          JPanel panel = new JPanel();
          panel.addMouseWheelListener(new MouseWheelListener(){
          public void mouseWheelMoved(MouseWheelEvent e) {

          }
          });
          panel.setLayout(new GridLayout(2,1));
          JScrollPane sp = new JScrollPane(panel);
          pane.add(sp);
          JTextField textField = new JTextField();
          textField.setBackground(Color.RED);

          panel.add(textField);
          JTextArea textArea = new JTextArea();
          //Um die Größe zu überschreiten:
          textArea.setRows(30);
          //Alternativ: Um die Größe zu überschreiten:
          // for (int i=0;i<320;i++){
          // textArea.append("aaaa\n");
          // }
          panel.add(textArea);

          frame.setVisible(true);
          }

          }


          Viele Grüße,
          Felix

          PS: Ich verwende ein JDK 1.6.0_11 und hab als Compliance Level 5.0 eingestellt.

          Comment


          • #6
            Verschiebe mal das adden des Listeners an das Ende also vor dem setVisible
            Christian

            Comment


            • #7
              JScrollpane scrollt nicht mehr wenn..

              Das Verschieben scheint bei mir keinen Unterschied zu machen. Was sollte sich ändern?

              ...
              panel.addMouseWheelListener(new MouseWheelListener(){
              public void mouseWheelMoved(MouseWheelEvent e) {

              }
              });
              frame.setVisible(true);
              }


              Gruß, Felix

              Comment


              • #8
                Was sollte sich ändern?
                Da ich dan in meinem Test am Schluss hatte...
                Christian

                Comment


                • #9
                  JScrollpane scrollt nicht mehr wenn..

                  Ich bekomme es leider nicht hin, dass das ScrollEvent sowohl von mir abgefangen wird als auch die Scrollbalken bewegt werden.

                  Habe in der Component-Klasse an der dispatchMouseWheelToAncestor-Methode auch folgenden Kommentar gefunden:

                  * Dispatch given MouseWheelEvent to the first ancestor for which
                  * MouseWheelEvents are enabled.

                  Ich denke mal dass dort ein ReDispatch oder was ähnliches fehlt und man das in der behandelnden Methode selbst machen muss nach dem Muster


                  panel.addMouseWheelListener(new MouseWheelListener(){
                  public void mouseWheelMoved(MouseWheelEvent e) {
                  panel.getParent().dispatchEvent(e);
                  }
                  });


                  Nachtrag:

                  Es scheint wohl auch bei geschachtelten Scrollpanes so zu sein, dass am Ende des inneren Scrollbalkens nicht im äußeren weitergescrollt wird. Dh. es bleibt wohl nur eigene abgeleitete Komponenten zu schreiben die das anders handhaben.

                  Viele Grüße,
                  Felix
                  Zuletzt editiert von FelixD; 13.05.2009, 18:18. Reason: Neue Erkenntnisse

                  Comment

                  Working...
                  X