2017-12-19 47 views
0

JScrollPaneのスクロールバーを無効または非表示にしたいのですが、マウスホイールを使って上下にスクロールさせます。 verticalScrollBarPolicy(NEVER)を使用すると、スクロールバーが非表示になるため、Okですが、ホイールは使用できません。スウィングスクロールバーを無効または非表示にしますが、ホイールを有効にしますか?

提案がありますか? ありがとう!

+0

[mcve]はどこですか?あなたは最後の質問で1つを求められました。 – camickr

+0

@camickr MCVEはどのようにしてこれに答えるのを手助けしますか?潜在的な回答者はスクロールバーを隠している間にホイールを有効にする方法を知っています。無関係なコードの読み込みをquerentsに勧めないでください。 –

+0

@DawoodibnKareem私は、自分自身の中で、質問に答えを出すことができるだけでなく、他の人が仕事をするのを助けるという点で、OPがやっていることについていくつか考えていることは非常に重要だと主張します多くの場合、「自分の持つものに合わない」ためにポスターが合意しない解決法があり、それが起こらないとは思わない。そしてOPは質問を二重に続けているので、別の問題があります – MadProgrammer

答えて

1

Based on this answer from CodeRanchスクロールバーが表示されない場合、スクロールが無効になります。 JScrollBarisVisibleプロパティを上書きしてスクロールする必要があります。

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.FontMetrics; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Rectangle; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollBar; 
import javax.swing.JScrollPane; 
import javax.swing.Scrollable; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame frame = new JFrame(); 
       JScrollPane scrollPane = new JScrollPane(new TestPane()); 
       JScrollBar scrollBar = new JScrollBar(JScrollBar.VERTICAL) { 

        @Override 
        public boolean isVisible() { 
         return true; 
        } 
       }; 
       // if appropriate, uncomment 
       //scrollBar.putClientProperty("JScrollBar.fastWheelScrolling", Boolean.TRUE); 
       scrollPane.setVerticalScrollBar(scrollBar); 
       scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); 
       frame.add(scrollPane); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel implements Scrollable { 

     public TestPane() { 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 800); 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      Graphics2D g2d = (Graphics2D) g.create(); 
      FontMetrics fm = g2d.getFontMetrics(); 
      Integer lineY = null; 
      for (int yPos = fm.getAscent(); yPos < getHeight(); yPos += 30) { 
       g2d.drawString(Integer.toString(yPos), 10, yPos + fm.getAscent()); 
       if (lineY != null) { 
        g2d.drawLine(15, lineY, 15, yPos); 
       } 
       lineY = yPos + fm.getAscent(); 
      } 
     } 

     @Override 
     public Dimension getPreferredScrollableViewportSize() { 
      return new Dimension(200, 200); 
     } 

     @Override 
     public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) { 
      return 64; 
     } 

     @Override 
     public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) { 
      return 128; 
     } 

     @Override 
     public boolean getScrollableTracksViewportWidth() { 
      return false; 
     } 

     @Override 
     public boolean getScrollableTracksViewportHeight() { 
      return false; 
     } 

    } 

} 

あなたは理論をテストするためにデモンストレーションの目的のために純粋にここで使用され、Scrollableを使用する必要はありません。

これは、しかし、また、1つまたは複数のコンポーネントが中に含まれている場合は、他の注意点は、もありますが、スクロールの全体的な速度、あなたはさらに

ああを調査する必要があります何かに影響を与える可能性がある、getScrollableUnitIncrementを呼び出して停止しますJScrollPaneMouseWheelListenerイベントに登録され、スクロールペインが通知されなくなります。