0
JScrollPane에서 스크롤바를 비활성화하거나 숨기고 싶지만 사용자가 마우스 휠로 위아래로 스크롤 할 수있게하십시오. verticalScrollBarPolicy (NEVER)를 사용하면 스크롤 막대가 표시되지 않으므로 Ok이지만 휠을 사용할 수 없습니다.SWING은 스크롤바를 비활성화하거나 숨기고 휠을 활성화합니까?
제안 사항? 감사합니다.
JScrollPane에서 스크롤바를 비활성화하거나 숨기고 싶지만 사용자가 마우스 휠로 위아래로 스크롤 할 수있게하십시오. verticalScrollBarPolicy (NEVER)를 사용하면 스크롤 막대가 표시되지 않으므로 Ok이지만 휠을 사용할 수 없습니다.SWING은 스크롤바를 비활성화하거나 숨기고 휠을 활성화합니까?
제안 사항? 감사합니다.
Based on this answer from CodeRanch, 스크롤 막대가 표시되지 않으면 스크롤이 비활성화됩니다. JScrollBar
isVisible
속성을 재정 의하여 스크롤해야합니다. 당신은 Scrollable
를 사용할 필요가 없습니다
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;
}
}
}
, 이론을 테스트하기 위해 데모 목적으로 순수 여기에 사용됩니다. 하나 개 이상의 구성 요소에 포함 된 경우
이
은, 그러나, 또한 스크롤의 전반적인 속도에 영향을 미칠 수getScrollableUnitIncrement
를 호출 중지, 뭔가이 더
아를 조사해야합니다, 다른주의 사항이 있습니다 JScrollPane
이 MouseWheelListener
이벤트에 등록하면 스크롤 창을 알리는 메시지가 표시되지 않습니다.
[mcve]는 어디에 있습니까? 마지막 질문에서 한 명을 요청 받았습니다. – camickr
@camickr MCVE는 누구에게이 문제에 대한 답을 어떻게 도울 수 있습니까? 잠재적 인 응답자는 스크롤 막대를 숨기는 동안 휠을 활성화하는 방법을 알고 있습니다. 관련성이없는 코드를 querents에 게시하는 것을 권장하지 마십시오. –
@DawoodibnKareem OP가하는 일에 대해 약간의 아이디어를 갖는 것이 매우 중요하다고 주장 할 것입니다. 그 자체로는 질문에 대한 답을 제공 할 수있을뿐 아니라 다른 사람들이 일을하지 못하게하는 데 도움이된다는 것입니다 많은 경우 포스터가 "자신이 가진 것에 적합하지 않아"동의하지 않는 솔루션을 소유하고 있으며, 그것이 발생하지 않는다고 생각하지 않습니다. 그리고 OP가 질문을 두 배로 계속하기 때문에, 또 다른 문제가 있습니다. – MadProgrammer