我需要将另一个类中的值传递给此类以及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);
}
}
您的代码有一些问题: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的值。