JScrollPaneのスクロールバーを無効または非表示にしたいのですが、マウスホイールを使って上下にスクロールさせます。 verticalScrollBarPolicy(NEVER)を使用すると、スクロールバーが非表示になるため、Okですが、ホイールは使用できません。スウィングスクロールバーを無効または非表示にしますが、ホイールを有効にしますか?
提案がありますか? ありがとう!
JScrollPaneのスクロールバーを無効または非表示にしたいのですが、マウスホイールを使って上下にスクロールさせます。 verticalScrollBarPolicy(NEVER)を使用すると、スクロールバーが非表示になるため、Okですが、ホイールは使用できません。スウィングスクロールバーを無効または非表示にしますが、ホイールを有効にしますか?
提案がありますか? ありがとう!
Based on this answer from CodeRanchスクロールバーが表示されない場合、スクロールが無効になります。 JScrollBar
のisVisible
プロパティを上書きしてスクロールする必要があります。
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
を呼び出して停止しますJScrollPane
はMouseWheelListener
イベントに登録され、スクロールペインが通知されなくなります。
[mcve]はどこですか?あなたは最後の質問で1つを求められました。 – camickr
@camickr MCVEはどのようにしてこれに答えるのを手助けしますか?潜在的な回答者はスクロールバーを隠している間にホイールを有効にする方法を知っています。無関係なコードの読み込みをquerentsに勧めないでください。 –
@DawoodibnKareem私は、自分自身の中で、質問に答えを出すことができるだけでなく、他の人が仕事をするのを助けるという点で、OPがやっていることについていくつか考えていることは非常に重要だと主張します多くの場合、「自分の持つものに合わない」ためにポスターが合意しない解決法があり、それが起こらないとは思わない。そしてOPは質問を二重に続けているので、別の問題があります – MadProgrammer