用过java2D的请进 遇到一问题:new 一个Line2D()响应鼠标事件(鼠标进入图形时候图标形状变成十字状)的时候不能被选中,而new一个Rectangle()或Ellipse()可以被选中;这是为什么?如何将Line2D()变为一个闭合图形,从而使之可选呢?谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 呵呵,正在看Oreilly的java2D给你一个例子,你看一下是如何选中的import java.awt.Dimension;import java.awt.Frame;import java.awt.Toolkit;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class ApplicationFrame extends Frame{ /** * */ private static final long serialVersionUID = 5615364649875351782L; public ApplicationFrame() { this("ApplicationFrame v1.0"); } public ApplicationFrame(String title) { super(title); createUI(); } protected void createUI() { setSize(500, 400); center(); addWindowListener(new WindowAdapter() { @Override public void windowClosed(WindowEvent e) { dispose(); System.exit(0); } }); } public void center() { Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = getSize(); int x = (screenSize.width - frameSize.width) / 2; int y = (screenSize.height - frameSize.height) / 2; setLocation(x, y); }}import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Shape;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.awt.geom.CubicCurve2D;import java.awt.geom.Line2D;import java.awt.geom.Point2D;import java.awt.geom.QuadCurve2D;import java.awt.geom.Rectangle2D;public class DragKing extends ApplicationFrame implements MouseListener, MouseMotionListener{ /** * */ private static final long serialVersionUID = -3997715010627598331L; protected Point2D[] mPoints; protected Point2D mSelectedPoint; public static void main(String[] args) { new DragKing(); } public DragKing() { super("DragKing v1.0"); setSize(300, 300); center(); mPoints = new Point2D[9]; //Cubic curve mPoints[0] = new Point2D.Double(50, 75); mPoints[1] = new Point2D.Double(100, 100); mPoints[2] = new Point2D.Double(200, 50); mPoints[3] = new Point2D.Double(250, 75); //Quad curve mPoints[4] = new Point2D.Double(50, 175); mPoints[5] = new Point2D.Double(150, 150); mPoints[6] = new Point2D.Double(250, 175); //Line mPoints[7] = new Point2D.Double(50, 275); mPoints[8] = new Point2D.Double(250, 275); mSelectedPoint = null; addMouseListener(this); addMouseMotionListener(this); setVisible(true); } @Override public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; //Draw the tangents Line2D tangent1 = new Line2D.Double(mPoints[0], mPoints[1]); Line2D tangent2 = new Line2D.Double(mPoints[2], mPoints[3]); g2.setPaint(Color.gray); g2.draw(tangent1); g2.draw(tangent2); //Draw the cubic curve CubicCurve2D c = new CubicCurve2D.Float(); c.setCurve(mPoints, 0); g2.setPaint(Color.black); g2.draw(c); //Draw the tangents tangent1 = new Line2D.Double(mPoints[4], mPoints[5]); tangent2 = new Line2D.Double(mPoints[5], mPoints[6]); g2.setPaint(Color.gray); g2.draw(tangent1); g2.draw(tangent2); //Draw the quadratic curve QuadCurve2D q = new QuadCurve2D.Float(); q.setCurve(mPoints, 4); g2.setPaint(Color.black); g2.draw(q); //Draw the line Line2D l = new Line2D.Double(); l.setLine(mPoints[7], mPoints[8]); g2.setPaint(Color.black); g2.draw(l); for(int i=0; i<mPoints.length; i++) { if(mPoints[i] == mSelectedPoint) { g2.setPaint(Color.red); }else { g2.setPaint(Color.blue); } g2.fill(getControlPoint(mPoints[i])); } } protected Shape getControlPoint(Point2D p) { int side = 4; return new Rectangle2D.Double(p.getX() - side / 2, p.getY() -side / 2, side, side); } public void mouseDragged(MouseEvent e) { if(null != mSelectedPoint) { mSelectedPoint.setLocation(e.getPoint()); repaint(); } } public void mouseMoved(MouseEvent e) { } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { mSelectedPoint = null; for(int i=0; i<mPoints.length; i++) { Shape s = getControlPoint(mPoints[i]); if(s.contains(e.getPoint())) { mSelectedPoint = mPoints[i]; break; } } repaint(); } public void mouseReleased(MouseEvent e) { }} 请问Dazzlingwinter,如何让鼠标在直线之上的时候变为十字状态,还有拖动的时候可整体移动呢;ps你的以上回复很有帮助~ setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR))貌似是这个 LS修改鼠标形状的正解当移出所属区域是应设置回原来形状LZ,移动图形的我已经写好了,发你邮箱了,注意查收,就不贴在这里了,O(∩_∩)O~ java如何求两个时间的和? struts1 单例的认识求教 深浅clone问题 JAVA如何调用OFFICE 请帮我看看。我有点迷糊。 dom4j删除节点问题! 如何读取jar包里的图片文件? java与c的socket的传输问题 java中又没有提供方法可以取得文件的大小? 怎么设计问题的JAVA应用程序?大家来探讨探讨! myeclipse打jar包问题 InternetAddress [] address 如何定义
给你一个例子,你看一下是如何选中的import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class ApplicationFrame extends Frame{
/**
*
*/
private static final long serialVersionUID = 5615364649875351782L; public ApplicationFrame() {
this("ApplicationFrame v1.0");
}
public ApplicationFrame(String title) {
super(title);
createUI();
}
protected void createUI() {
setSize(500, 400);
center();
addWindowListener(new WindowAdapter() {
@Override
public void windowClosed(WindowEvent e) {
dispose();
System.exit(0);
}
});
}
public void center() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = getSize();
int x = (screenSize.width - frameSize.width) / 2;
int y = (screenSize.height - frameSize.height) / 2;
setLocation(x, y);
}
}
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.CubicCurve2D;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.awt.geom.QuadCurve2D;
import java.awt.geom.Rectangle2D;public class DragKing extends ApplicationFrame implements MouseListener, MouseMotionListener{
/**
*
*/
private static final long serialVersionUID = -3997715010627598331L;
protected Point2D[] mPoints;
protected Point2D mSelectedPoint;
public static void main(String[] args) {
new DragKing();
}
public DragKing() {
super("DragKing v1.0");
setSize(300, 300);
center();
mPoints = new Point2D[9];
//Cubic curve
mPoints[0] = new Point2D.Double(50, 75);
mPoints[1] = new Point2D.Double(100, 100);
mPoints[2] = new Point2D.Double(200, 50);
mPoints[3] = new Point2D.Double(250, 75);
//Quad curve
mPoints[4] = new Point2D.Double(50, 175);
mPoints[5] = new Point2D.Double(150, 150);
mPoints[6] = new Point2D.Double(250, 175);
//Line
mPoints[7] = new Point2D.Double(50, 275);
mPoints[8] = new Point2D.Double(250, 275);
mSelectedPoint = null;
addMouseListener(this);
addMouseMotionListener(this);
setVisible(true);
}
@Override
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
//Draw the tangents
Line2D tangent1 = new Line2D.Double(mPoints[0], mPoints[1]);
Line2D tangent2 = new Line2D.Double(mPoints[2], mPoints[3]);
g2.setPaint(Color.gray);
g2.draw(tangent1);
g2.draw(tangent2);
//Draw the cubic curve
CubicCurve2D c = new CubicCurve2D.Float();
c.setCurve(mPoints, 0);
g2.setPaint(Color.black);
g2.draw(c);
//Draw the tangents
tangent1 = new Line2D.Double(mPoints[4], mPoints[5]);
tangent2 = new Line2D.Double(mPoints[5], mPoints[6]);
g2.setPaint(Color.gray);
g2.draw(tangent1);
g2.draw(tangent2);
//Draw the quadratic curve
QuadCurve2D q = new QuadCurve2D.Float();
q.setCurve(mPoints, 4);
g2.setPaint(Color.black);
g2.draw(q);
//Draw the line
Line2D l = new Line2D.Double();
l.setLine(mPoints[7], mPoints[8]);
g2.setPaint(Color.black);
g2.draw(l);
for(int i=0; i<mPoints.length; i++) {
if(mPoints[i] == mSelectedPoint) {
g2.setPaint(Color.red);
}else {
g2.setPaint(Color.blue);
}
g2.fill(getControlPoint(mPoints[i]));
}
} protected Shape getControlPoint(Point2D p) {
int side = 4;
return new Rectangle2D.Double(p.getX() - side / 2, p.getY() -side / 2, side, side);
}
public void mouseDragged(MouseEvent e) {
if(null != mSelectedPoint) {
mSelectedPoint.setLocation(e.getPoint());
repaint();
}
} public void mouseMoved(MouseEvent e) {
} public void mouseClicked(MouseEvent e) {
} public void mouseEntered(MouseEvent e) {
} public void mouseExited(MouseEvent e) {
} public void mousePressed(MouseEvent e) {
mSelectedPoint = null;
for(int i=0; i<mPoints.length; i++) {
Shape s = getControlPoint(mPoints[i]);
if(s.contains(e.getPoint())) {
mSelectedPoint = mPoints[i];
break;
}
}
repaint();
} public void mouseReleased(MouseEvent e) {
}}
貌似是这个
当移出所属区域是应设置回原来形状
LZ,移动图形的我已经写好了,发你邮箱了,注意查收,就不贴在这里了,O(∩_∩)O~