📄 midbresenhampanelline.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 + -