java - 非瞬时画线

标签 java swing user-interface

你会如何画一条线,但不是瞬间,而是慢慢地,就像你实际上在一张纸上画一条线一样。另外,如何控制画线的速度?主要部分位于刚刚启动程序的另一个类中。

public class Moving extends JPanel implements ActionListener {
    Timer time = new Timer(5000, this);
    boolean rotation1 = false;
    public Moving() {
        addKeyListener(new TAdapter());
        setFocusable(true);
        initGame();


    }
    public void initGame() {
        time.start();
    }

    public void paintComponent(Graphics g) {
    super.paintComponent(g);
    this.setBackground(Color.RED); 
    if(rotation1) {
        for(int p = 0; p < 600; p++) {
            this.setBackground(Color.BLUE);
            g.drawRect(10, p, 20, 20);
        }

    }
    }


    public void start() {
        Moving game = new Moving(); 
        JFrame frame = new JFrame("Frame"); 
        frame.setSize(320, 340);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(game); 
        frame.setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        repaint();

    }
    private class TAdapter extends KeyAdapter {
        public void keyTyped(KeyEvent e) {
        }

        public void keyPressed(KeyEvent e) {
            int key = e.getKeyCode();
            if(key == KeyEvent.VK_1) {
                rotation1 = true;
            }           
                    }

        public void keyReleased(KeyEvent e) {
        }
    }
}

最佳答案

您无法尝试在 paintComponent 方法中执行动画。这将阻止事件调度线程,从而阻止实际绘制任何内容(除其他外)。

您需要做的是在后台等待一段特定的时间,然后更新状态并重新绘制。

虽然有很多方法可以实现这一点,最简单的是使用 javax.swing.Timer

这允许您指定一个延迟期,当触发该延迟期时,它会在 EDT 的上下文中进行回调,从而可以安全地从内部更新 UI

看看Event Dispatching ThreadHow to use Swing Timers了解更多详情

关于java - 非瞬时画线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21371628/

相关文章:

java - setQueueXmlPath 的基础

java - Tomcat 7.0 启动时抛出错误

java - 将 XML 的内部部分反序列化为新的类实例

java - JPanel 背景颜色在某些边框类型上溢出到边框之外

C# 透明图形用户界面

python - 限制使用 tkFileDialog.asksaveasfile 时保存的文件扩展名

c# - 右键单击选择 .Net TreeNode

java - Informix JDBC、MONEY 和字符串文字中的小数点分隔符的问题

java - 如何在基于 Jtree/Jtable 的文件列表中创建刷新/重新加载?

java - 使 JPanel 动态适应 JDialog