java - 如何在 slider 移动时而不只是在松开鼠标时调用 Action 监听器?

标签 java swing

class AngleSlider implements ChangeListener {
        public void stateChanged(ChangeEvent e) {
        JSlider source = (JSlider) e.getSource();
        if (!source.getValueIsAdjusting()) {

            double dAngle = (double)source.getValue();
            pnlCannon.dCannonAngle=Math.toRadians(dAngle);
            pnlCannon.repaint();

        }
    }
}

这是我们当前的事件监听器。是否需要不同的监听器来执行我想要的操作?

最佳答案

不需要,您只需要删除 getValueIsAdjusting() 检查。因此,当您移动鼠标时,这将重新绘制您的大炮:

class AngleSlider implements ChangeListener {
    public void stateChanged(ChangeEvent e) {
        JSlider source = (JSlider) e.getSource();

        double dAngle = (double)source.getValue();
        pnlCannon.dCannonAngle=Math.toRadians(dAngle);
        pnlCannon.repaint();
    }
}

这是另一个显示相同内容的示例,它将在您移动 slider 时打印 slider 的值:

public static void main(String[] args) {

    JFrame frame = new JFrame("Test");

    JSlider slider = new JSlider();

    slider.addChangeListener(new ChangeListener() {
        @Override
        public void stateChanged(ChangeEvent ce) {
            System.out.println(((JSlider) ce.getSource()).getValue());
        }
    });

    frame.add(slider);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 300);
    frame.setVisible(true);
}

关于java - 如何在 slider 移动时而不只是在松开鼠标时调用 Action 监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4369077/

相关文章:

java - 无法显示 JTable 中的行(数据库中的值)

java - 如何在java中将日历设置为特定日期和时间

java - 需要解析 JAVA 中 JSON 对象内的 JSON 数组

Java Swing 按钮保持按下状态

java - 使用 java 创建 Windows 用户帐户

不允许声明 Java 变量

java - Java 中的嵌套复选框

JavaGUI 和 jpanel 啧啧

java - 为什么我的 Java 异常在 SwingWorker 中抛出时不打印堆栈跟踪?

java JPanel,动态添加组件到它和JScrollPane