Как прокрутить внешнюю JScrollPane, если в ней есть меньшая? - PullRequest
0 голосов
/ 19 апреля 2020

Вопрос:

Есть ли способ создать JScrollPane вокруг JTextArea, который будет вести себя так, как будто JScrollPane отсутствует, так что основной внешний JPanel с панелью прокрутки не потеряет свой «фокус», если моя мышь выше JTextArea?

У меня есть следующая проблема:

У меня есть некоторые JTextAreas, добавленные в полосы прокрутки, которые затем добавляются в одну большую JScrollPane.

Если я теперь хочу прокрутить в большой полосе прокрутки ничего не происходит, когда я нахожусь над другой полосой прокрутки одной из текстовых областей.

Как я могу сделать так, чтобы система всегда прокручивала большую полосу прокрутки и игнорировала маленькие из областей JtextAreas?

Код:

public class Artikelbehaelter extends javax.swing.JPanel {
public Artikelbehaelter(){
    setBackground(new java.awt.Color(66, 66, 66));
    setMaximumSize(new java.awt.Dimension(1320, 6300));
    setMinimumSize(new java.awt.Dimension(1320, 6300));
    setPreferredSize(new java.awt.Dimension(1320, 6300));
    setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 0, 0));
    getAccessibleContext().setAccessibleName("JPanel");
}

  }
}

public class Artikelpanel extends javax.swing.JPanel
{
public Artikelpanel(){
    scrollbarTextArea.getViewport().setOpaque(false);
    scrollbarTextArea.setOpaque(false);

    scrollbarTextArea.setHorizontalScrollBarPolicy  
    (JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    scrollbarTextArea.setVerticalScrollBarPolicy  
    (JScrollPane.VERTICAL_SCROLLBAR_NEVER);
    scrollbarTextArea.setBorder(null);

    textarea = new javax.swing.JTextArea();
    textarea.setEditable(false);
    textarea.setColumns(20);
    textarea.setFont(new java.awt.Font("Dialog", 1, 14)); // NOI18N
    textarea.setLineWrap(true);
    textarea.setRows(5);
    textarea.setText("Apple Iphone 11 Pro Max");
    textarea.setWrapStyleWord(true);
    textarea.setBorder(null);
    textarea.setOpaque(false);
    textarea.setForeground(fore);
    textarea.setText(artikel.gesBezeichnungGeben().replaceAll("#"," "));
    textarea.setFont(new java.awt.Font("Dialog", 1, 16));
    scrollbarTextArea.setViewportView(name);
}}

public class Test extends JFrame(){
public Test(){
    setLayout(null);
    setVisible(true);
    setSize(1600, 900);
    getContentPane().setBackground(hellefarbe);
    setTitle("LAGERVERWALTUNG");
    frame.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass(). 
    getResource("Desktop/JG Lagerverwaltung Icon.png")));
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setMinimumSize(getSize());
    setMaximumSize(getSize());
    setResizable(false);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int n = (d.width - getSize().width) / 2;
    int m = (d.height - getSize().height) / 2;
    setLocation(n, m);
    addMouseListener(this);
    artikelbehaelter = new Artikelbehaelter()
    scrollbar = new JScrollPane(artikelbehaelter)
    scrollbar.setBounds(265 + 3, 50, 1320 - 3, 850);
    scrollbar.setHorizontalScrollBarPolicy 
    (JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    scrollbar.getVerticalScrollBar().setUnitIncrement(16);
    scrollbar.setBorder(new javax.swing.border.MatteBorder                     
    (0, 0, 0, 0,Color.BLACK));
}}

1 Ответ

0 голосов
/ 20 апреля 2020

У меня есть решение. Просто поместите MouseWheelListener на маленькие внутренние JScrollPanes и, если движение обнаружено, прокрутите основную JScrollPane:

    private void MouseWheelMoved(java.awt.event.MouseWheelEvent evt) {                                     

      int notch = evt.getWheelRotation();
      int units = evt.getScrollAmount();
      if (notch < 0){
          units = units*(-1);}

      JScrollBar bar = scrollbar[0].getVerticalScrollBar();
      bar.setValue(bar.getValue()+units);

}            
...