我正在尝试使用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);
}
有效,谢谢你的帮助
答案 0 :(得分:1)
您可以尝试使用概述here的方法。覆盖paintComponent()
以获取相对于封闭面板的图形上下文,而不是封闭框架。
要使原点位于左边缘,请使用
g2d.translate(0, h / 2);
要获得直立的笛卡尔坐标,请使用
g2d.scale(1, -1);