Java 2d坐标转换

时间:2014-04-21 19:53:28

标签: java swing graphics2d

我正在尝试使用java 2d图形库绘制图形,我想我已经拥有它了。我想绘制坐标系,其中0,0位于左边缘面板的中心。我使用了以下代码,它似乎给了我需要的结果。

private void doDraw(Graphics g) {
  Graphics2D g2d = (Graphics2D) g;
  AffineTransform saveAT = g2d.getTransform();
  // get the height of the panel
  int height = getHeight();
  // Find the middle of the panel
  double yTrans = ((double)height)/2.0;
  AffineTransform tform = AffineTransform.getTranslateInstance( 0.0, yTrans);
  g2d.setTransform(tform);
  //draw the line for the x-axis.
  g2d.drawLine(0,  0, 100, 0);
  //restore the old transform
  g2d.setTransform(saveAT);
}

这绘制了窗口中心的原点。

当我添加菜单时问题就出现了。然后原点在y方向偏移大约两倍于菜单大小应该是的。我是否需要考虑菜单的大小以及我添加到面板的其他容器?

private void doDraw(Graphics g) {
  Graphics2D g2d = (Graphics2D) g.create();

  int height = getHeight();
  double yTrans = ((double)height)/2.0;
  AffineTransform tform = AffineTransform.getTranslateInstance( 0.0, yTrans);
  g2d.transform(tform);
  //draw the line for the x-axis.
  g2d.drawLine(0,  0, 100, 0);
}

有效,谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

您可以尝试使用概述here的方法。覆盖paintComponent()以获取相对于封闭面板的图形上下文,而不是封闭框架。

要使原点位于左边缘,请使用

g2d.translate(0, h / 2);

要获得直立的笛卡尔坐标,请使用

g2d.scale(1, -1);