Warum reagiert JScrollPane nicht auf Mausrad-Ereignisse?

Ich habe einJScrollPane mit einem Panel mit einemBoxLayout (SEITENACHSE).

Mein Problem ist, dass das JScrollPane nicht auf Mausradereignisse reagiert. Um mit dem Mausrad scrollen zu können, muss ich auf der seinJScrollBar.

ich habe das gefundenFaden und ich habe keineMouseMotionListener oderMouseWheelListener, nur aMouseListener. Ich denke, mein Problem kommt von der Tatsache, dass meineJScrollPane wirken auf aJPanel das enthält andere Panels selbst. Wenn sich die Maus also auf einem Panel in der befindetJScrollPane Es scheint, dass das Ereignis von diesem Bereich verbraucht wird, den ich nie im Bildlauffenster gesehen habe.

Ist da einrichtig Wie können die Ereignisse, die von den untergeordneten Elementen des Bildlauffensters erfasst werden, für dieses Bildlauffenster sichtbar gemacht werden?

SSCCE:

Hier ein einfacher Testfall, der zeigt, wann ich es in meiner Swing-Anwendung versuche.

Der Rahmen:

public class NewJFrame extends javax.swing.JFrame {

    public NewJFrame() {
        initComponents();
        for (int i = 0; i < 50; i++) {
            jPanel1.add(new TestPanel());
        }
    }

private void initComponents() {
        jScrollPane1 = new javax.swing.JScrollPane();
        jPanel1 = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1,    javax.swing.BoxLayout.PAGE_AXIS));
        jScrollPane1.setViewportView(jPanel1);

        getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);

        pack();
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
           @Override
            public void run() {
                new NewJFrame().setVisible(true);
           }
        });
    }
}

Und dasTestPanel Definition:

public class TestPanel extends javax.swing.JPanel {

    public TestPanel() {
        initComponents();
    }

    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();

        jLabel1.setText("jLabel1");

        setBackground(new java.awt.Color(255, 51, 51));
        setLayout(new java.awt.BorderLayout());

        jLabel2.setText("TEST LABEL");
        jLabel2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        add(jLabel2, java.awt.BorderLayout.PAGE_START);

        jTextArea1.setEditable(false);
        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jTextArea1.setFocusable(false);
        jScrollPane1.setViewportView(jTextArea1);

        add(jScrollPane1, java.awt.BorderLayout.CENTER);
   }
}

DasJTextArea scheint das Ereignis zu verbrauchen, da das Scrollen mit dem Mausrad nicht funktioniert, wenn sich der Mauszeiger darin befindet. Ich muss den Mauszeiger außerhalb des Textbereichs platzieren, damit es wieder funktioniert.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage