当前位置:编程学习 > JAVA >>

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();
}
}
--------------------编程问答-------------------- 事件监听里的鼠标监听 --------------------编程问答--------------------
引用 3 楼 Inhibitory 的回复:
挺有意思的
Java code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899……
很不错的?就是不晓得,能否使用折线呢?谢谢
--------------------编程问答--------------------
引用 5 楼 fuckyouvreymuch 的回复:
引用 3 楼 Inhibitory 的回复:挺有意思的
Java code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787……

折线就用GeneralPath --------------------编程问答-------------------- --------------------编程问答-------------------- 线段只有2个点,折线是多个点
生成一个线段或折线类,保存它的各个点的坐标
鼠标操作时,判断鼠标位置是否在线上,在的话就表示对相应线进行操作,拖动后,修改线段或折线各点的坐标
然后重新paint --------------------编程问答-------------------- 除 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 8 楼 ace62 的回复:
线段只有2个点,折线是多个点
生成一个线段或折线类,保存它的各个点的坐标
鼠标操作时,判断鼠标位置是否在线上,在的话就表示对相应线进行操作,拖动后,修改线段或折线各点的坐标
然后重新paint

这位大神,这些流程我都晓得,但是他是通过一大堆时间转成一大堆相应坐标后画一组不同的折线,就是实现不了啊。就把我急的。做毕业设计用的, --------------------编程问答-------------------- 我都给你写到这种程序了都还不会写,这毕业真是... --------------------编程问答--------------------
引用 12 楼 Inhibitory 的回复:
我都给你写到这种程序了都还不会写,这毕业真是...

老师只准用drawline()实现好不好。不晓得业务不能乱说的,你以为铁路列车运行图是那么想用绘就能绘出来的? --------------------编程问答--------------------
引用 13 楼 fuckyouvreymuch 的回复:
Quote: 引用 12 楼 Inhibitory 的回复:

我都给你写到这种程序了都还不会写,这毕业真是...

老师只准用drawline()实现好不好。不晓得业务不能乱说的,你以为铁路列车运行图是那么想用绘就能绘出来的?

水平不行,说话也不行,呵呵,自求多福吧! --------------------编程问答-------------------- 大家帮你,客气点。
首先搞清楚 drawline()各个参数的含义,如点的坐标的意义(在铁路列车运行图中)
然后将你的数据按drawline()的要求进行转换,这是关键的环节 --------------------编程问答-------------------- 除
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,