⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 midbresenhampanelline.java

📁 利用Java采用中点Brasenham算法同时绘制多个圆。
💻 JAVA
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package bresenham;import java.awt.Color;import java.awt.Graphics;import java.awt.Point;import java.awt.event.ComponentEvent;import java.awt.event.ComponentListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.util.Vector;import javax.swing.JLabel;import javax.swing.JPanel;/** * * @author Lenovo */public class midBresenhamPanelLine extends JPanel implements MouseListener, ComponentListener,Runnable {    JLabel PointLabel;    Vector<Point> pointset;    Vector<Point> pointtwo;    Thread myThread;    int temp=0;    public midBresenhamPanelLine() {        this.setEnabled(true);        PointLabel = new JLabel();        this.add(PointLabel, "North");        pointset = new Vector<Point>();        pointtwo = new Vector<Point>();        this.addMouseListener(this);                myThread=new Thread(this);        myThread.start();    }    public void mousePressed(MouseEvent e) {        if (pointset.size() > 0) {            pointset.removeAllElements();        }        Point p = new Point(e.getX(), e.getY());        pointtwo.add(p);        if (pointtwo.size() == 2) {            this.midBresenhamline();        // repaint();        }    }    public void midBresenhamline() {        Point firstpoint, lastpoint;        int x, y, dx, dy, e;        float k;        firstpoint = pointtwo.get(0);        lastpoint = pointtwo.get(1);        dx = lastpoint.x - firstpoint.x;        dy = lastpoint.y - firstpoint.y;        k = (float) dy / (float) dx;        pointtwo.removeAllElements();        PointLabel.setText("起点为:(" + firstpoint.x + "," + firstpoint.y + ");  终点为:(" + lastpoint.x + "," + lastpoint.y + ")  斜率为: k=" + k);        if (k >= 0 && k < 1) {            e = -dx;            x = firstpoint.x;            y = firstpoint.y;            while (x <= lastpoint.x) {                Point newpoint = new Point(x, y);                pointset.add(newpoint);                repaint();                x++;                e = e + 2 * dy;                if (e > 0) {                    y++;                    e = e - 2 * dx;                }            }        }    }    public void run() {        while (true) {            if (myThread.isAlive() && !myThread.isInterrupted()) {                try {                    repaint();                    Thread.sleep(100);                    temp++;                    if(temp==pointset.size()){                       // myThread.interrupt();                        temp=0;                    }                } catch (InterruptedException ex) {                }            } else {                break;            }        }    }        @Override    protected void paintComponent(Graphics g) {        Point current;        int size;        g.clearRect(0, 0, getWidth(), this.PointLabel.getHeight() + 2);        if (pointset.size() != 0) {            size = temp + 1;            for (int i = 0; i < size; i++) {                current = pointset.get(i);                g.setColor(Color.RED);                g.drawLine(current.x, current.y, current.x, current.y);            }        }    }    public void mouseClicked(MouseEvent e) {    }    public void mouseReleased(MouseEvent e) {    }    public void mouseEntered(MouseEvent e) {    }    public void mouseExited(MouseEvent e) {    }    public void componentResized(ComponentEvent e) {        repaint();    }    public void componentMoved(ComponentEvent e) {    }    public void componentShown(ComponentEvent e) {    }    public void componentHidden(ComponentEvent e) {    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -