当前位置: 代码迷 >> J2SE >> 为什么一个值就是传不过去呀!解决思路
  详细解决方案

为什么一个值就是传不过去呀!解决思路

热度:117   发布时间:2016-04-24 01:25:35.0
为什么一个值就是传不过去呀!
ContentPanel.java
Java code
public class ContentPanel extends JPanel{    private static final long serialVersionUID = 1L;    //    private MyLine line;//    private MyOval oval;//    private MyRectangle rect;    private int shapeNumber;    private MyShape[] shape;    public  int numLine,numOval,numRect;    private int i;    public  String strNum;    //定义随机数组,该数组格式为{randomX1,randomY1,randomX2,randomY2,randomColor,randomFill,randomShape}    public int[] randomAttr;     public boolean fillStatus;        public ContentPanel(int number){        shapeNumber=number;        shape=new MyShape[shapeNumber];    }        protected void paintComponent(Graphics g) {        numLine=numOval=numRect=0;                super.paintComponent(g);        //g.drawString("yuzhengzhong", 10,570);        for(i=0;i<shapeNumber;i++){            randomAttr=GetRandom.getRandom();            if(randomAttr[5]==0)                fillStatus=false;            else if(randomAttr[5]==1)                fillStatus=true;                        switch(randomAttr[6]){            case Global.Line:                shape[i]=new MyLine(randomAttr[0],randomAttr[1],randomAttr[2],randomAttr[3],randomAttr[4]);                shape[i].draw(g);                numLine++;                break;            case Global.OVAL:                shape[i]=new MyOval(randomAttr[0],randomAttr[1],randomAttr[2],randomAttr[3],randomAttr[4],fillStatus);                shape[i].draw(g);                numOval++;                break;            case Global.RECTANGLE:                shape[i]=new MyRectangle(randomAttr[0],randomAttr[1],randomAttr[2],randomAttr[3],randomAttr[4],fillStatus);                shape[i].draw(g);                numRect++;                break;            }        }        strNum="Lines:"+numLine+"   Ovals:"+numOval+"   Rectangles:"+numRect;        g.drawString(strNum, 10,570);    }    public String retShapeNum(){        System.out.println(strNum);        return strNum;    }}


Main.java
Java code
public class Main {    public static void main(String[] args){        JFrame frame=new JFrame("yuzhengzhong 实验四!");        frame.setSize(600+10,600+35);        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                String str=JOptionPane.showInputDialog("Enter the number of the shapes:");        int number=Integer.parseInt(str);        //System.out.println(number);                ContentPanel panel=new ContentPanel(number);        frame.add(panel);                String shapeNumbers=panel.retShapeNum();        System.out.print(shapeNumbers);        JLabel label=new JLabel(shapeNumbers);        frame.add(label,"South");                frame.setVisible(true);    }}



ContentPanel.java中g.drawString(strNum, 10,570);能正常显示出数值,但方法retShapeNum中的测试语句System.out.println(strNum);输出为null,Main.java中的测试语句System.out.print(shapeNumbers);也为null,相信都知道我的意图,但strNum就是传不过去,我从理论分析好像不应该呀,大家帮忙想一下,为什么呀,thank you~


------解决方案--------------------
很简单啊,因为在frame.setVisible(true);之后才会调用控件的panit方法,才会给strNum变量赋值,之前掉肯定是空嘛,把取值语句放到frame.setVisible(true);之后就应该可以了
  相关解决方案