java 绘图问题
如何解决java 采用drawline()画线之后,实现该线的拖动功能,求教各位java的爱好者和学习者。做好有个具体的例子,感激不尽啊 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 挺有意思的import java.awt.Graphics;--------------------编程问答-------------------- 事件监听里的鼠标监听 --------------------编程问答-------------------- 很不错的?就是不晓得,能否使用折线呢?谢谢
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Line2D;
import java.awt.geom.Path2D;
import java.awt.geom.Point2D;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Test extends JPanel {
private Line2D line;
private boolean mousePressed = false;
private Point2D refPosition = new Point2D.Double(0, 0);
public Test() {
line = new Line2D.Double(50, 50, 300, 300) {
private final int delta = 2;
@Override
public boolean contains(double x, double y) {
Path2D path = new Path2D.Double();
path.moveTo(getX1() - delta, getY1());
path.lineTo(getX1() + delta, getY1());
path.lineTo(getX2() + delta, getY2());
path.lineTo(getX2() - delta, getY2());
path.closePath();
return path.contains(x, y);
}
};
addMouseListener(new MouseListener());
addMouseMotionListener(new MouseListener());
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.draw(line);
}
class MouseListener extends MouseAdapter {
@Override
public void mousePressed(MouseEvent event) {
if (line.contains(event.getX(), event.getY())) {
Test.this.mousePressed = true;
refPosition.setLocation(event.getX(), event.getY());
}
}
@Override
public void mouseReleased(MouseEvent event) {
Test.this.mousePressed = false;
}
@Override
public void mouseDragged(MouseEvent event) {
if (Test.this.mousePressed) {
double deltaX = event.getX() - refPosition.getX();
double deltaY = event.getY() - refPosition.getY();
refPosition.setLocation(event.getX(), event.getY());
line.setLine(
line.getX1() + deltaX,
line.getY1() + deltaY,
line.getX2() + deltaX,
line.getY2() + deltaY);
Test.this.repaint();
}
}
}
private static void createGuiAndShow() {
JFrame frame = new JFrame();
frame.getContentPane().add(new Test());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) throws IOException {
createGuiAndShow();
}
}
--------------------编程问答--------------------
折线就用GeneralPath --------------------编程问答-------------------- --------------------编程问答-------------------- 线段只有2个点,折线是多个点
生成一个线段或折线类,保存它的各个点的坐标
鼠标操作时,判断鼠标位置是否在线上,在的话就表示对相应线进行操作,拖动后,修改线段或折线各点的坐标
然后重新paint --------------------编程问答-------------------- 除 --------------------编程问答-------------------- --------------------编程问答--------------------
这位大神,这些流程我都晓得,但是他是通过一大堆时间转成一大堆相应坐标后画一组不同的折线,就是实现不了啊。就把我急的。做毕业设计用的, --------------------编程问答-------------------- 我都给你写到这种程序了都还不会写,这毕业真是... --------------------编程问答--------------------
老师只准用drawline()实现好不好。不晓得业务不能乱说的,你以为铁路列车运行图是那么想用绘就能绘出来的? --------------------编程问答--------------------
水平不行,说话也不行,呵呵,自求多福吧! --------------------编程问答-------------------- 大家帮你,客气点。
首先搞清楚 drawline()各个参数的含义,如点的坐标的意义(在铁路列车运行图中)
然后将你的数据按drawline()的要求进行转换,这是关键的环节 --------------------编程问答-------------------- 除
补充:Java , Java SE