此应用程序用于触摸屏。我只需要仅当用户触摸JScrollPane区域时JScrollPane的滚动条才可见。
我是GUI的新手,正在摇摆。如果您以其他形式提出的问题,我看不懂什么是有用的,或者请提供链接。
您可以通过setHorizontalScrollBarPolicy
上的setVerticalScrollBarPolicy
和JScrollPane
的方法调用中的适当参数设置每个滚动条是否可见。
您可以在FocusListener
内部执行此操作(这是针对焦点事件,例如获得焦点和失去焦点的事件),该事件将安装在JScrollPane
的内容中,或更准确地说,将安装在JScrollPane
中]的Viewport
的视图组件(即JScrollPane
滚动的内容)。
以下面的代码为例:
import java.awt.Dimension;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
public class Main {
private static void prepare(final JScrollPane scroll) {
scroll.getViewport().getView().addFocusListener(new FocusListener() {
@Override
public void focusGained(final FocusEvent e) {
scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
}
@Override
public void focusLost(final FocusEvent e) {
scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
}
});
}
public static void main(final String[] args) {
final JTextArea area = new JTextArea("Type your messages here...");
final JScrollPane scroll = new JScrollPane(area);
scroll.setPreferredSize(new Dimension(400, 100));
prepare(scroll);
final JPanel components = new JPanel();
components.add(new JButton("Click me to change focus!"));
components.add(scroll);
final JFrame frame = new JFrame("Scroll auto focus.");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(components);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
当您单击弹出的框的按钮时,焦点将从Viewport
的JScrollPane
的视图中丢失,并且滚动条将隐藏。之后,当您在JTextArea
(在本例中为JScrollPane
的Viewport
的视图组件)内部单击时,将重新获得焦点,因此只需使用适当的方法显示滚动条致电。