为什么我的静态变量不更改值?

问题描述 投票:-1回答:1

我需要将另一个类中的值传递给此类以及paint方法,以创建形状。我试图将MakeFinalTree方法旁边列出的参数传递到paint方法中,所以我有paint(Graphics g,double finalNodeDisti,double branchLength1i,double branchLength2i,double branchLength3i,String leaf1ai,String leaf1bi,String leaf2ai,String leaf2bi,String leaf3ai,字符串leaf3bi),但随后出现错误。

因此,我尝试使MakeFinalTree方法下列出的变量成为静态类变量,以便可以对其进行更改,然后在paint方法中,finalNodeDist变量将为finalNodeDisti的值。但是,当我这样做时,paint方法中的finalNodeDist保持等于0,而在MakeFinalTree方法中,它等于2。为什么静态变量没有变化?如何将值输入到paint方法中?

例如,MakeFinal树中参数值的值可能是:

finalNodeDisti = 2.5;
branchLength1i = 6.5;
branchLength2i = 5.5;
branchLength3i = 3.25;
leaf1ai = "A";
leaf1bi = "B";
leaf2ai = "C";
leaf2bi = "D";
leaf3ai = "E";
leaf3bi = "F";

而且我从其他班级叫这个班级:

MakeTree tree = new MakeTree(finalNodeDisti, branchLength1i, branchLength2i, branchLength3i, leaf1ai, leaf1bi, leaf2ai, leaf2bi,leaf3ai,leaf3bi);
import java.awt.*;

public class MakeFinalTree extends Frame {
    static int finalNodeDist;
    static int branchLength1;
    static int branchLength2;
    static int branchLength3;
    static String leaf1a = "", leaf1b = "", leaf2a = "", leaf2b = "", leaf3a = "", leaf3b = "";

    public MakeFinalTree(double finalNodeDisti, double branchLength1i, double branchLength2i, double branchLength3i,
            String leaf1ai, String leaf1bi, String leaf2ai, String leaf2bi, String leaf3ai, String leaf3bi) {
        setTitle("Phylogenetic Tree");
        setSize(1000, 800);
        setVisible(true);
        finalNodeDist = (int) finalNodeDisti;
        branchLength1 = (int) branchLength1i;
        branchLength2 = (int) branchLength2i;
        branchLength3 = (int) branchLength3i;
        leaf1a = leaf1ai;
        leaf1b = leaf1bi;
        leaf2a = leaf2ai;
        leaf2b = leaf2bi;
        leaf3a = leaf3ai;
        leaf3b = leaf3bi;


    }



    public void paint(Graphics g) {

        Graphics2D g2d = (Graphics2D) g;

        // root line

        int x1 = 50;
        int y1 = 800 / 2;
        int x2 = 100;
        int y2 = 800 / 2;

        g2d.drawLine(x1, y1, x2, y2);

        // subroot line 1
        int xrt1 = x2;
        int yrt1 = y2;
        int xrt2 = xrt1;
        int yrt2 = y1 + 100;
        g2d.drawLine(xrt1, yrt1, xrt2, yrt2);
        // subroot line 2
        int xrb1 = x2;
        int yrb1 = 800 / 2;
        int xrb2 = xrb1;
        int yrb2 = y1 - 100;
        g2d.drawLine(xrb1, yrb1, xrb2, yrb2);

        // final node dist lines
        int xFDt1 = xrt2;
        int yFDt1 = yrt2;
        int xFDt2 = finalNodeDist * 10;
        int yFDt2 = yrt2;
        g2d.drawLine(xFDt1, yFDt1, xFDt2, yFDt2);

        // final node dist lines
        int xFDb1 = xrb2;
        int yFDb1 = yrb2;
        int xFDb2 = finalNodeDist * 10;
        int yFDb2 = yrb2;
        g2d.drawLine(xFDb1, yFDb1, xFDb2, yFDb2);

    }

}
java jframe jpanel paint
1个回答
0
投票

您的代码有一些问题:1. Public MakeFinalTree是构造函数,而不是方法。构造函数是一个在您传递参数时具有值的对象。2.静态变量属于类,而不是对象。示例:

public class Human{
static int height = 4;
}

Height属于Human类,意味着所有人类的高度都将为4。您可以通过Human.height来访问它,并且它将返回4。

public class Human{
int height;
public Human(int height){
this.height = height;
}
}

因此,当您初始化对象Human:

Human h1 = new Human(4);
Human h2 = new Human(5);

然后,h1的高度为4,h2的高度为5。3.要解决您的问题,只需使用getter方法:

public int getFinalNodeDist(){
return FinalNodeDist;
}

构造函数:

public MakeFinalTree(double FinalNodeDist, //parameters){
this.FinalNodeDist = int(FinalNodeDist):
}

[不要使用其他名称,因为以后您会感到困惑。

以及初始化对象时:

MakeFinalTree f = new MakeFinalTree(//add all parameters here);

要获得f的FinalNodeDist值,您可以:

f.getFinalNodeDist();

它将返回您FinalNodeDist的值。

© www.soinside.com 2019 - 2024. All rights reserved.