谁能告诉我Draw2d如何画点和直线? 因为我要做一个类似报表编辑的功能,界面上要有坐标系,一系列点组成的折线或者曲线,这些点可以动态拖拽编辑。谁做过类似的,能共享下代码就更好了。另外就是我的数据里面坐标都是小数点后有六位数据的浮点数,如何能够设计一种方法能把它无损的转换成-100-100之间的整数,而且当我在图形界面编辑了之后,还能在再把整数在无损的转换成我的数据的格式。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 重载JPanel的paint函数即可 public void paint(Graphics g){ Graphics2D gg = (Graphics2D) g; super.paint(gg); gg.setColor(Color.BLACK);//常规用黑色 gg.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);//开启边缘抗锯齿修正 gg.drawLine(point1.x, point1.y, point2.x, point2.y);//画线的样例 drawPoint(point,gg);//画点的示例,那个点实际是半径为3的圆} public void drawPoint(Point2D point,Graphics2D gg){ Color prevColor = gg.getColor();//获取之前用的颜色 gg.setColor(Color.BLUE); gg.fillOval(point.x - 3, point.y - 3, 6, 6);//通过更改3和6确定半径,此函数实际是画一个椭圆 gg.setColor(prevColor); } /** * 查看一个点是否在指定线段上 * @param point * @param stPoint * @param endPoint * @param precision 精度修正,即在sqrt(precision)内的点都算在线段上 * @return */ public static boolean checkPointInLine(PointEntity point,PointEntity stPoint,PointEntity endPoint,double precision) { if( Line2D.ptSegDistSq(stPoint.getX(),stPoint.getY(),endPoint.getX(),endPoint.getY(),point.getX(),point.getY()) <= precision) return true; return false; }坐标转换自己逻辑算下即可,查看一个点是否在一个线段上用checkPointInLine函数。下面是我程序中判断是否在折线上的方法,PointEntity是extends Point2D//此方法在PointEntity内,查看两个点是否可被判定为同一个点 public boolean checkTwoPointSame(PointEntity pointB,double precision) { if(Point2D.distanceSq(this.getX(),this.getY(),pointB.getX(),pointB.getY()) <= precision) return true; return false; } /** * 查看一个点是否落在折线上 * 注意:此函数并不考虑连接元素时需要进行的裁剪 * @param point 点 * @param line 目标折线 * @param precision 误差精度 * @return List([String 处在第几段折线上], [如果刚好是端点,则用于返回端点]) */ public static List checkPointInLine(PointEntity point,LineEntity line,double precision) { ArrayList retList = new ArrayList(); ArrayList pointlist = new ArrayList(); pointlist.add( getElementCenterPoint(line.getFromEntity())); pointlist.addAll(line.getPointList()); pointlist.add(getElementCenterPoint(line.getToEntity())); for(int i = 0; i < pointlist.size()-1 ; i++) { if(checkPointInLine(point,(PointEntity) pointlist.get(i),(PointEntity) pointlist.get(i+1), precision)) { retList.add(i+""); if(point.checkTwoPointSame((PointEntity) pointlist.get(i), precision)) retList.add(pointlist.get(i)); else if(point.checkTwoPointSame((PointEntity) pointlist.get(i+1), precision)) retList.add(pointlist.get(i+1)); else retList.add(new PointEntity()); return retList; } } return null; } import java.awt.Color;import java.awt.Frame;import java.awt.Graphics;import java.awt.Image;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class TestFrame extends Frame { private Image img = null; public TestFrame(){ super("test frame"); setBackground(Color.BLUE); setSize(800,500); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { super.windowClosing(e); System.exit(0); } }); } public static void main(String[] args) { TestFrame testFrame = new TestFrame(); testFrame.setVisible(true); } public void paint(Graphics g){ g.setColor(Color.RED); g.drawLine(50, 100, 200, 100); } } C++转JAVA,有地方不明白 Image转成BufferedImage 关于 java.beans.PropertyDescriptor.getWriteMethod() 各位前辈, 请问怎样提高自己阅读代码的水平? 请问"断言"怎么用啊?? 一个简单的JSP文件 设计一个小的应用程序,请问如何设计构架及类? 请问war是什么文件? 谁能给我《Java 2 核心技术 卷I:基础知识》的源代码,本人的随书光盘丢了,谢谢了!急 Java http://localhost:8080/yy/save?{json字符串} 用java生成gif动画怎么做? 编写一个简单程序(代码越简练越好)。
public void paint(Graphics g){
Graphics2D gg = (Graphics2D) g;
super.paint(gg);
gg.setColor(Color.BLACK);//常规用黑色
gg.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);//开启边缘抗锯齿修正
gg.drawLine(point1.x, point1.y, point2.x, point2.y);//画线的样例
drawPoint(point,gg);//画点的示例,那个点实际是半径为3的圆
} public void drawPoint(Point2D point,Graphics2D gg){
Color prevColor = gg.getColor();//获取之前用的颜色
gg.setColor(Color.BLUE);
gg.fillOval(point.x - 3, point.y - 3, 6, 6);//通过更改3和6确定半径,此函数实际是画一个椭圆
gg.setColor(prevColor);
} /**
* 查看一个点是否在指定线段上
* @param point
* @param stPoint
* @param endPoint
* @param precision 精度修正,即在sqrt(precision)内的点都算在线段上
* @return
*/
public static boolean checkPointInLine(PointEntity point,PointEntity stPoint,PointEntity endPoint,double precision)
{
if( Line2D.ptSegDistSq(stPoint.getX(),stPoint.getY(),endPoint.getX(),endPoint.getY(),point.getX(),point.getY()) <= precision)
return true;
return false;
}坐标转换自己逻辑算下即可,查看一个点是否在一个线段上用checkPointInLine函数。
下面是我程序中判断是否在折线上的方法,PointEntity是extends Point2D
//此方法在PointEntity内,查看两个点是否可被判定为同一个点
public boolean checkTwoPointSame(PointEntity pointB,double precision)
{
if(Point2D.distanceSq(this.getX(),this.getY(),pointB.getX(),pointB.getY()) <= precision)
return true;
return false;
}
/**
* 查看一个点是否落在折线上
* 注意:此函数并不考虑连接元素时需要进行的裁剪
* @param point 点
* @param line 目标折线
* @param precision 误差精度
* @return List([String 处在第几段折线上], [如果刚好是端点,则用于返回端点])
*/
public static List checkPointInLine(PointEntity point,LineEntity line,double precision)
{
ArrayList retList = new ArrayList();
ArrayList pointlist = new ArrayList();
pointlist.add( getElementCenterPoint(line.getFromEntity()));
pointlist.addAll(line.getPointList());
pointlist.add(getElementCenterPoint(line.getToEntity()));
for(int i = 0; i < pointlist.size()-1 ; i++)
{
if(checkPointInLine(point,(PointEntity) pointlist.get(i),(PointEntity) pointlist.get(i+1), precision))
{
retList.add(i+"");
if(point.checkTwoPointSame((PointEntity) pointlist.get(i), precision))
retList.add(pointlist.get(i));
else if(point.checkTwoPointSame((PointEntity) pointlist.get(i+1), precision))
retList.add(pointlist.get(i+1));
else
retList.add(new PointEntity());
return retList;
}
}
return null;
}
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class TestFrame extends Frame {
private Image img = null;
public TestFrame(){
super("test frame");
setBackground(Color.BLUE);
setSize(800,500);
addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) {
super.windowClosing(e);
System.exit(0);
}
});
}
public static void main(String[] args) {
TestFrame testFrame = new TestFrame();
testFrame.setVisible(true);
}
public void paint(Graphics g){
g.setColor(Color.RED);
g.drawLine(50, 100, 200, 100);
}
}