栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

延迟在Java图形中不起作用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

延迟在Java图形中不起作用

我假设您正在某个

paint/paintComponent
方法中调用此方法。

只是一个提示: 从来没有睡过油漆过程

而是将a

javax.swing.Timer
用于重复任务。什么
会做的是

  • 有两个

    Lists
    。你
    List<Point> bresenham
    和另一个
    List<Point> paintList
    。该
    bresenham
    会握住你的数据,并且
    paintList
    将初始为空。

  • paintList
    画你的观点

        @override    protected void paintComponent(Graphics g) {        super.paintComponent(g);        Graphics2D g2 = (Graphics2D)g;        for (Point p : paintList) { int x = bresenham.get(i).x - pointWidth1/2; int y = bresenham.get(i).y - pointWidth1/2; int ovalW = pointWidth1; int ovalH = pointWidth1; g.fillOval(x, y, ovalW, ovalH);        }    }
  • 尽管最初没有任何内容
    paintList
    ,但您会
    Point
    在每次触发计时器事件时将一个新值添加到列表中。
        Timer timer = new Timer(100, new ActionListener(){        @Override        public void actionPerformed(ActionEvent e) { if (bresenham.isEmpty()) {     ((Timer)e.getSource()).stop(); } else {     paintList.add(bresemham.get(0));     bresenham.remove(0); } repaint();          }    });    timer.start();

构造函数的基本计时器为firs the

delay
,它是 “ iterations”
和侦听器中第二个参数之间的延迟时间,该参数实际上侦听每
delay
毫秒触发的计时器事件。那么上面的代码通常做的就是添加
Point
paintList
取自
bresenham
列表,然后删除的项目
repaint
,其调用
paintComponent
。当列表为空时,计时器将停止。


更新

这是一个完整的运行示例

    import java.awt.Dimension;    import java.awt.Graphics;    import java.awt.Point;    import java.awt.event.*;    import java.util.*;    import javax.swing.*;    import javax.swing.Timer;    public class BresenhamPoints extends JPanel {        private static final int D_W = 500;        private static final int D_H = 500;        private List<Point> bresenhamList;        private List<Point> paintList;        public BresenhamPoints() { bresenhamList = createRandomPoints(); paintList = new ArrayList<>(); Timer timer = new Timer(100, new ActionListener() {     public void actionPerformed(ActionEvent e) {         if (bresenhamList.isEmpty()) {  ((Timer) e.getSource()).stop();         } else {  paintList.add(bresenhamList.get(0));  bresenhamList.remove(0);         }         repaint();     } }); timer.start();        }        private List<Point> createRandomPoints() { Random rand = new Random(); List<Point> list = new ArrayList<>(); for (int i = 0; i < 100; i++) {     list.add(new Point(rand.nextInt(D_H), rand.nextInt(D_H))); } return list;        }        @Override        protected void paintComponent(Graphics g) { super.paintComponent(g); for (Point p : paintList) {     g.fillOval(p.x - 5, p.y - 5, 10, 10); }        }        @Override        public Dimension getPreferredSize() { return new Dimension(D_W, D_H);        }        public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() {     public void run() {         Jframe frame = new Jframe();         frame.add(new BresenhamPoints());         frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);         frame.pack();         frame.setLocationRelativeTo(null);         frame.setVisible(true);     } });        }    }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/507534.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号