Facebook Sharer
选择您要替换的背景颜色:
【农历新年】背景图片:
个性化设定
 注册  找回密码
查看: 746|回复: 0
打印 上一主题 下一主题

ProgressBar 问题

[复制链接]

3

主题

2

好友

472

积分

翡翠长老

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

跳转到指定楼层
1#
发表于 2010-4-19 08:53 PM |只看该作者 |正序浏览
当我trigger action listener 我的progressBar不能run~只有走完了才会show frame

test class:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class test extends JFrame implements ActionListener{
        progressBar bar = new progressBar();
        JButton b;
        public test(){
                b = new JButton("test");
                b.addActionListener(this);
               
                /*without actionlistener is fine*/
                //bar.showBar();
               
                add(b);
               
        }
        public static void main (String args[]){
                test demo = new test();
                demo.setVisible(true);
                demo.pack();
        }
        public void actionPerformed(ActionEvent e) {
                String cmd = e.getActionCommand();
                if(cmd.equals("test")){
                        /*The progress bar does not show up, it show only till it finish*/
                        bar.showBar();
                       
                }
               
        }
}

progressBar class :
import java.awt.*;
import javax.swing.*;

public class progressBar extends JFrame{
        static int counter;
    DownloadFile df = new DownloadFile();
        JLabel downloadMsg, downloading;
        static JProgressBar bar;
       
        public progressBar(){
               
            setUndecorated(true);
                bar = new JProgressBar();
                JPanel msgPanel = new JPanel();
                JPanel barPanel = new JPanel();
                barPanel.add(bar);
                msgPanel.setLayout(new BoxLayout(msgPanel,BoxLayout.X_AXIS));
                JPanel main = new JPanel(new BorderLayout());
                msgPanel.setBackground(Color.BLACK);
                barPanel.setBackground(Color.BLACK);
                downloadMsg = new JLabel("Sydney.csv");
                downloadMsg.setForeground(Color.WHITE);
                downloading = new JLabel("Downloading : ");
                downloading.setForeground(Color.WHITE);
                msgPanel.setBorder(BorderFactory.createMatteBorder(16, 0, 0, 0, Color.black));
                msgPanel.add(Box.createHorizontalStrut(10));
                msgPanel.add(downloading);
                msgPanel.add(downloadMsg);
                main.add(msgPanel,BorderLayout.CENTER);
                main.add(barPanel,BorderLayout.SOUTH);
                main.setPreferredSize(new Dimension(300,50));
                JSetting();
                add(main);
               
        }
        private void JSetting(){
                bar.setPreferredSize(new Dimension(280,10));
        }
        public void setProgressMax(int maxProgress)
          {
            bar.setMaximum(maxProgress);
          }

          public void setProgress(int progress)
          {
            final int theProgress = progress;
            SwingUtilities.invokeLater(new Runnable() {
              public void run() {
                bar.setValue(theProgress);
              }
            });
          }
        public void setProgress(String message, int progress)
          {
            final int theProgress = progress;
            final String theMessage = message;
            setProgress(progress);
            SwingUtilities.invokeLater(new Runnable() {
              public void run() {
                bar.setValue(theProgress);
                setMessage(theMessage);
              }
            });
          }
        public void setScreenVisible(boolean b)
          {
            final boolean boo = b;
            SwingUtilities.invokeLater(new Runnable() {
              public void run() {
                bar.setVisible(boo);
              }
            });
          }
        private void setMessage(String message)
          {
            if (message==null)
            {
              message = "";
              bar.setStringPainted(false);
            }
            else
            {
              bar.setStringPainted(true);
            }
            downloadMsg.setText(message);
          }
        private void resetBar(){
                setProgress(0);
        }
        public void showBar(){
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                progressBar bar = new progressBar();
                bar.setVisible(true);
                bar.setAlwaysOnTop(true);
                bar.isActive();
        bar.pack();
        for (int i = 0; i <= 100; i++)
        {
          for (long j=0; j<500000; ++j)
          {
            String poop = " " + (j + i);
          }
          bar.setProgress(i);
        }
        }
        public static void main(String args[]){
                progressBar bar = new progressBar();
                bar.setVisible(true);
        bar.pack();
        
        for (int i = 0; i <= 100; i++)
        {
          for (long j=0; j<50000; ++j)
          {
            String poop = " " + (j + i);
          }
          bar.setProgress(i);
        }
        bar.resetBar();
        }
}

是不是要用到invokelater 还是 multithreading阿?




收藏收藏0
您需要登录后才可以回帖 登录 | 注册

JBTALKS.CC |联系我们 |隐私政策 |Share

GMT+8, 2024-10-25 09:29 PM , Processed in 0.112473 second(s), 29 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

Ultra High-performance Dedicated Server powered by iCore Technology Sdn. Bhd.
Domain Registration | Web Hosting | Email Hosting | Forum Hosting | ECShop Hosting | Dedicated Server | Colocation Services
本论坛言论纯属发表者个人意见,与本论坛立场无关
Copyright © 2003-2012 JBTALKS.CC All Rights Reserved
合作联盟网站:
JBTALKS 马来西亚中文论坛 | JBTALKS我的空间 | ICORE TECHNOLOGY SDN. BHD.
回顶部