它们实际上是两个问题:
第一个问题:JScrollBar 和 AdjustEvent 中的getValueIsAdjusting()
有什么区别
我用一些代码尝试了它们来测试是否有任何差异,但我没有得到任何差异!这是显示我如何测试它们的代码。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ScrollTest extends JPanel
{
JPanel panel;
JScrollBar scroll;
public ScrollTest()
{
scroll = new JScrollBar(JScrollBar.HORIZONTAL, 0, 6, 0, 300);
scroll.addAdjustmentListener(ScrollListener);
panel = new JPanel(new GridLayout(1, 0));
panel.add(scroll);
this.setLayout(new BorderLayout());
this.add(panel);
}
AdjustmentListener ScrollListener = new AdjustmentListener()
{
@Override
public void adjustmentValueChanged(AdjustmentEvent e)
{
if(e.getValueIsAdjusting())
{
System.out.println("AdjustmentEvent");
}
if(scroll.getValueIsAdjusting())
{
System.out.println("JScrollBar");
}
}
};
private static void createAndShowGUI()
{
JFrame frame;
frame = new JFrame("Scroll Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(880, 100);
frame.add(new ScrollTest(), BorderLayout.CENTER);
frame.setVisible(true);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
UIManager.put("swing.boldMetal", Boolean.FALSE);
createAndShowGUI();
}
});
}
}
上面的代码将依次打印"AdjustEvent"和"JScrollBar"字符串。 看来他们之间没有区别!
重要的一点是何时/为了使用每个?
第二个问题:
如何收听 JScrollBar 按钮? 如果您测试了上面的代码,它会在您移动旋钮或单击条带时打印字符串,但当您单击 JScrollBar 的按钮时不会打印字符串!
在类adjustmentValueChanged
中添加一个事件(如此处所述AdjustmentListener
)。
如果事件类型为AdjustmentEvent.TRACK
则还要打印语句。
if(e.getValueIsAdjusting())
{
System.out.println("AdjustmentEvent");
}
if(scroll.getValueIsAdjusting())
{
System.out.println("JScrollBar");
}
if(e.getAdjustmentType() == AdjustmentEvent.TRACK)
{
System.out.println("The button in scrollbar clicked");
}
这将捕获JScrollBar
上的按钮单击操作。