我如何通过事件使文本动态化?

时间:2014-03-14 08:11:53

标签: java dynamic

您好,我制作了一个代码,可以下载一个应用程序,而且一切正常。

我的问题是我想在框架上显示“请等到jar完成下载... 50%完成”我希望50%更改为正在下载的文件的左边%。

我得到了所有设置,但它改变的部分是不起作用。

继承我的代码:

        while(( length = inputstream.read(buffer)) > -1)
    {
        down += length;

        bufferedoutputstream.write(buffer, 0 , length);
        String text = clientDL.label1.getText();
        text +=  getPerc() + "%";
    }

这是我的getPerc()方法:

    private  int getPerc() {

    return  (down / (sizeOfClient + 1)) * 100;
}

感谢。

5 个答案:

答案 0 :(得分:1)

回答

  

“请等到jar完成下载...完成50%”我想要   要下载的文件的%左侧更改50%。

while(( length = inputstream.read(buffer)) > -1)
               {
            down += length;
                    bufferedoutputstream.write(buffer, 0 , length);
            String text = clientDL.label1.getText();
             int perc = getPerc();

     if(perc <= 50)        
    {
    text +=  getPerc() + "% done";
    }else
    {
     text ="Please wait until the jar is downloading..."
     text = text + (100 - perc) + " % remaining"
    } 
       }

答案 1 :(得分:0)

这里的主要问题是Java不能在类似指针的逻辑上工作,所以使用getter获取变量然后为该变量赋值不会做任何事情。

您正在寻找的是

clientDL.label1.setText("Whatever text you want to put in the label");

(对于记录,您可能想要为该标签定义一个getter,而不是直接访问label1,这是不好的做法)

答案 2 :(得分:0)

您想使用回车符号

System.out.print("10%\r")

编辑:你没有使用标准输出,我的不好。请参阅silverlord的回答

答案 3 :(得分:0)

我认为它应该或多或少是这样的:

 String text = clientDL.label1.getText();
 while(( length = inputstream.read(buffer)) > -1){
    down += length;

    bufferedoutputstream.write(buffer, 0 , length);

    SwingUtilities.invokeLater(new Runnable(){
       public void run(){
          clientDL.label1.setText(text +  getPerc() + "%");
       }
    });
}

(我假设你是在一个非AWT-Event-Queue的线程中下载文件)

答案 4 :(得分:0)

I dont have enough reputation to comment i am unable to provide you solution adding comment to your question. Anyway i tried similar scenario
I think there is a problem with your clientDL.label1.getText(); just like what solutions suggested by Silverlord. Please refer Silverlord answer


public class Checker {
int length = 0;
InputStreamReader inputstream;
FileInputStream fis = null;

    public void display() throws IOException
    {
         fis = new FileInputStream("C:\\Users\\298610\\Documents\\test.txt");
        inputstream = new InputStreamReader(fis);
        int i=0;
        while(( length = inputstream.read()) > -1)
            {
               if(i<getPerc().length)
               {
                String text = null;
                text = getPerc()[i] + "%";
                System.out.println("Hi man "+text);
               }
                i++;
            }
    }

     private  int[] getPerc() {

            return  new int[]{10,20,30,40,50,60,70,80,90,100};
        }

     public static void main(String a[]) throws IOException
     {
         Checker w =new Checker();
         w.display();
     }
}

我得到的输出如下: 嗨男人10% 嗨男人20% 嗨男人30% 嗨男人40% 嗨男人50% 嗨男人60% 嗨男人70% 嗨男人80% 嗨男人90% 嗨男人100%