Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java图形不在内部绘制if-else或递归_Java_Swing - Fatal编程技术网

Java图形不在内部绘制if-else或递归

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) {

我试图用java中的图标来绘制生命树之类的东西,但画得不正确。 下面是我的paintIcon方法调用的代码,用于绘制树。我后来添加了代码 只要调用draw的是paintIcon方法,就可以正确绘制。对draw的递归调用以及if语句中的任何g.drawString或g.drawsline行都不会绘制任何内容。这有什么原因吗?抱歉,如果这是太多或太少的信息


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语句都不会正确绘制。这仍然是一个奇怪的问题,但我可以解决它,所以这个问题可以被认为是解决了。