Dlaczego JScrollPane nie reaguje na zdarzenia kółka myszy?
mamJScrollPane
zawierający panel zBoxLayout
(OŚ STRON).
Moim problemem jest to, że JScrollPane nie reaguje na zdarzenia kółka myszy. Aby go przewinąć za pomocą kółka myszy, muszę być naJScrollBar
.
znalazłem towątek i nie mamMouseMotionListener
lubMouseWheelListener
, tylko aMouseListener
. Myślę, że mój problem wynika z faktu, że mójJScrollPane
działać naJPanel
który zawiera inne panele. Więc kiedy mysz znajduje się na panelu wewnątrzJScrollPane
wydaje się, że zdarzenie jest zużywane przez ten panel, którego nigdy nie widziałem przez panel przewijania.
Czy jestpoprawny sposób, aby zdarzenia przechwycone przez dzieci panelu przewijania były widoczne dla tego panelu przewijania?
SSCCE:
Oto prosty przypadek testowy próbujący pokazać, kiedy próbuję zrobić w mojej aplikacji Swing.
Ramka:
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);
}
});
}
}
ITestPanel
definicja:
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);
}
}
TheJTextArea
wydaje się, że zużywa zdarzenie, ponieważ gdy kursor myszy jest w środku, przewijanie za pomocą koła nie działa. Muszę umieścić kursor myszy poza obszarem tekstu, aby działał ponownie.