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.