Java图形不在内部绘制if-else或递归
我试图用java中的图标来绘制生命树之类的东西,但画得不正确。 下面是我的paintIcon方法调用的代码,用于绘制树。我后来添加了代码 只要调用draw的是paintIcon方法,就可以正确绘制。对draw的递归调用以及if语句中的任何g.drawString或g.drawsline行都不会绘制任何内容。这有什么原因吗?抱歉,如果这是太多或太少的信息Java图形不在内部绘制if-else或递归,java,swing,Java,Swing,我试图用java中的图标来绘制生命树之类的东西,但画得不正确。 下面是我的paintIcon方法调用的代码,用于绘制树。我后来添加了代码 只要调用draw的是paintIcon方法,就可以正确绘制。对draw的递归调用以及if语句中的任何g.drawString或g.drawsline行都不会绘制任何内容。这有什么原因吗?抱歉,如果这是太多或太少的信息 public void draw(Taxon t, Graphics2D g, int xStep, int yStep) {
public void draw(Taxon t, Graphics2D g, int xStep, int yStep) {
if(!t.isDrawn()) {
// does special action if drawing a leaf
if(t.getChildren().size() == 0) {
//leaves are all aligned on the right and get drawn in a column
t.setX(width - 100);
t.setY(50 + yStep * leafCount);
g.drawString(t.getName(), t.getX(), t.getY());
leafCount++;
t.setDrawn(true);
System.out.print("leaf");
}
else {
//draws all the children first
for(Taxon c : t.getChildren()) {
draw(c, g, yStep, xStep);
}
//x needs to be x step away from children while y is in the middle
t.setX(t.getChildren().get(0).getX() - xStep);
int average = 0;
for(Taxon c : t.getChildren()) {
average += c.getY();
}
t.setY(average / t.getChildren().size());
//draw connecting lines
for(Taxon c : t.getChildren()) {
g.drawLine(t.getX(), t.getY(), c.getX(), c.getY());
}
//getting info for filling up space behind node text since lines might overlap
FontMetrics fm = g.getFontMetrics();
Rectangle2D r = fm.getStringBounds(t.getName(), g);
//draw the highlight then the text itself
g.setColor(Color.WHITE);
g.fillRect(t.getX(), t.getY() - fm.getAscent(), (int)r.getWidth(), (int)r.getHeight());
g.setColor(Color.BLACK);
g.drawString(t.getName(), t.getX(), t.getY());
t.setDrawn(true);
System.out.print("node");
}
}
FontMetrics fm = g.getFontMetrics();
Rectangle2D r = fm.getStringBounds(t.getName(), g);
g.setColor(Color.WHITE);
g.fillRect(t.getX(), t.getY() - fm.getAscent(), (int)r.getWidth(), (int)r.getHeight());
g.setColor(Color.BLACK);
g.drawString(t.getName(), t.getX(), t.getY());
t.setDrawn(true);
}
如果你能发表一篇文章,这会对你的问题有所帮助。我尝试制作一个最小的可复制的例子似乎失败了,因为我的尝试都以某种方式解决了这个问题。然而,我确实了解到,如果我试图修改我已经发布的代码,只要有一个t.setdraw(true),If(!t.isDrawn())块中的任何draw语句都不会正确绘制。这仍然是一个奇怪的问题,但我可以解决它,所以这个问题可以被认为是解决了。