zoukankan      html  css  js  c++  java
  • 14 线程

    package thread;
    
    import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.EventQueue;
    import java.awt.event.ActionListener;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class Bounce {
    
        public static void main(String[] args) {
            EventQueue.invokeLater(() ->{
                JFrame jFrame = new BounceFrame();
                jFrame.setDefaultCloseOperation(jFrame.EXIT_ON_CLOSE);
                jFrame.setVisible(true); 
            });
        }
    
    }
    
    class BounceFrame extends JFrame{
        
        /**
         * 
         */
        private static final long serialVersionUID = 1L; 
        private BallComponent comp;
        public static final int STEPS = 1000;
        public static final int DELAY = 3;
        
        
        public BounceFrame(){
            setTitle("Bonus");
            comp = new BallComponent();
            this.getContentPane().add(comp, BorderLayout.CENTER);
            
            JPanel buttonPanel = new JPanel();
    //        this.addButton(buttonPanel, "start", event -> addBall());//单线程
            this.addButton(buttonPanel, "start", event -> addBallT());//创建多个线程,添加多个ball
            this.addButton(buttonPanel, "close", event -> System.exit(0)); 
            add(buttonPanel,BorderLayout.SOUTH);
            pack();
        }
        
        public void addButton(Container c,String title,ActionListener listener){
            JButton button = new JButton(title);
            c.add(button);
            button.addActionListener(listener);
        }
        
        public void addBall(){
            try {
                    Ball ball = new Ball();
                    comp.add(ball);
                    for (int i = 0; i < STEPS; i++) {
                        System.out.println("i--->"+i);
                        ball.move(comp.getBounds());
                        comp.paint(comp.getGraphics());
                        Thread.sleep(DELAY);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
        }
        
        public void addBallT(){
            Ball ball =  new Ball(); 
            comp.add(ball);
            //开启多线程
            Runnable r = () ->{
                try {
                    for (int i = 0; i < STEPS; i++) {
                        ball.move(comp.getBounds());
                        comp.repaint();
                        Thread.sleep(DELAY);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            };
            Thread thread = new Thread(r);
            thread.start(); 
        }
        
    }
    package thread;
    
    import java.awt.geom.Ellipse2D;
    import java.awt.geom.Rectangle2D;
    
    
    
    public class Ball {
    
        private static final int XSIZE  = 15;
        private static final int YSIZE  = 15;    
        private double x  = 0;
        private double y  = 0;
        private double dx  = 1;
        private double dy  = 1;
        
        public static void main(String[] args) {
    
        }
        
        public void move(Rectangle2D bounds){
            x += dx;
            y += dy;
            
            if(x < bounds.getMinX()){
                x = bounds.getMinX();
                dx = -dx;
            }
            if (x + XSIZE >= bounds.getMaxX()) {
                x = bounds.getMaxX() - XSIZE;
                dx = -dx;
            }
            
            if(y < bounds.getMinY()){
                y = bounds.getMinY();
                dy = -dy;
            }
            if (y + YSIZE >= bounds.getMaxY()) {
                y = bounds.getMaxY() - YSIZE;
                dy = -dy;
            }
            
        }
        
        public Ellipse2D getShape(){
            return new Ellipse2D.Double(x, y, XSIZE, YSIZE);
        }
    
    }
    package thread;
    
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.util.ArrayList;
    
    import javax.swing.JPanel;
    
    public class BallComponent extends JPanel {
    
        /**
         * 
         */
        private static final long serialVersionUID = 1L; 
        private static final int DEFAULT_WIDTH = 450;
        private static final int DEFAULT_HEIGHT = 350;
        
        private java.util.List<Ball> balls =  new ArrayList<>();
    
        
        public void add(Ball b){
            balls.add(b);
        }
        
        public void paintComponent(Graphics g){
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g;
            for(Ball b : balls){
                g2.fill(b.getShape()); 
            }
        }
        
        public Dimension getPreferredSize(){
            return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
        }
        public static void main(String[] args) {
    
        }
        
        
    
    }
  • 相关阅读:
    CF566E Restoring Map
    CF1034D Intervals of Intervals
    CF1285F Classical?
    Java日报
    课程考核感想
    每日日报8月31日
    每日日报8月30日
    每日日报8月29日
    每日日报8月28日
    每日日报8月27日
  • 原文地址:https://www.cnblogs.com/lxh520/p/8443820.html
Copyright © 2011-2022 走看看