我有6个顶点,用户应该能够创建一条线,例如,如果用户从顶点1拖拽鼠标到顶点2。用户释放鼠标并且鼠标没有在其中一个顶点结束,它不会创建一条线。当用户从点a拖拽到点b时,在椭圆之间创建一条线
我该怎么做?
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class DijkstraUI extends JComponent implements MouseListener {
String zero = "0";
String one = "1";
String two = "2";
String three = "3";
String four = "4";
String five = "5";
Ellipse2D zeroOval = new Ellipse2D.Double(50,120,50,50);
Ellipse2D oneOval = new Ellipse2D.Double(150,45,50,50);
Ellipse2D twoOval = new Ellipse2D.Double(150,150,50,50);
Ellipse2D threeOval = new Ellipse2D.Double(260,120,50,50);
Ellipse2D fourOval = new Ellipse2D.Double(100,240,50,50);
Ellipse2D fiveOval = new Ellipse2D.Double(200,250,50,50);
Point pointStart = null;
Point pointEnd = null;
public DijkstraUI(){
}
public static void main(String args[]) {
JFrame frame = new JFrame("Dijkstra: Finding the shortest path");
DijkstraUI dj = new DijkstraUI();
frame.getContentPane().add(dj);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.setVisible(true);
frame.setResizable(false);
}
@Override
public void paint(Graphics g){
Graphics2D g2d = (Graphics2D) g;
g2d.setPaint(Color.WHITE);
g2d.fill(zeroOval);
g2d.fill(oneOval);
g2d.fill(twoOval);
g2d.fill(threeOval);
g2d.fill(fourOval);
g2d.fill(fiveOval);
g2d.setPaint(Color.BLACK);
g2d.drawString(zero,70,150);
g2d.drawString(one,170,75);
g2d.drawString(two,170,180);
g2d.drawString(three,280,150);
g2d.drawString(four,120,270);
g2d.drawString(five,220,280);
super.paint(g);
if(pointStart != null)
g2d.drawLine(pointStart.x, pointStart.y, pointEnd.x, pointEnd.y);
}
@Override
public void mouseClicked(MouseEvent e) {
if((e.getButton() == 1) || zeroOval.contains(e.getX(), e.getY())){
System.out.print("test");
}
}
@Override
public void mousePressed(MouseEvent e) {
pointStart = e.getPoint();
}
@Override
public void mouseReleased(MouseEvent e) {
pointStart = null;
}
public void mouseMoved(MouseEvent e) {
pointEnd = e.getPoint();
}
public void mouseDragged(MouseEvent e) {
pointEnd = e.getPoint();
repaint();
}
@Override
public void mouseEntered(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void mouseExited(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
非常感谢!这是非常有用的,很好的解释。 – Temmie