java进度条?Java中如何实现进度条效果
大家好,java进度条相信很多的网友都不是很明白,包括Java中如何实现进度条效果也是一样,不过没有关系,接下来就来为大家分享关于java进度条和Java中如何实现进度条效果的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
Java中如何实现进度条效果
代码如下:import java.awt.Color; import java.awt.Toolkit; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JProgressBar; import javax.swing.JWindow;@SuppressWarnings("serial") public class Demo extends JWindow implements Runnable{//定义加载窗口大小 public static final int LOAD_WIDTH= 455; public static final int LOAD_HEIGHT= 295;//获取屏幕窗口大小 public static final int WIDTH= Toolkit.getDefaultToolkit().getScreenSize().width; public static final int HEIGHT= Toolkit.getDefaultToolkit().getScreenSize().height;//定义进度条组件 public JProgressBar progressbar;//定义标签组件 public JLabel label;//构造函数 public Demo(){//创建标签,并在标签上放置一张图片 label= new JLabel(new ImageIcon("images/background.jpg")); label.setBounds(0, 0, LOAD_WIDTH, LOAD_HEIGHT- 15);//创建进度条 progressbar= new JProgressBar();//显示当前进度值信息 progressbar.setStringPainted(true);//设置进度条边框不显示 progressbar.setBorderPainted(false);//设置进度条的前景色 progressbar.setForeground(new Color(0, 210, 40));//设置进度条的背景色 progressbar.setBackground(new Color(188, 190, 194)); progressbar.setBounds(0, LOAD_HEIGHT- 15, LOAD_WIDTH, 15);//添加组件 this.add(label); this.add(progressbar);//设置布局为空 this.setLayout(null);//设置窗口初始位置 this.setLocation((WIDTH- LOAD_WIDTH)/ 2,(HEIGHT- LOAD_HEIGHT)/ 2);//设置窗口大小 this.setSize(LOAD_WIDTH, LOAD_HEIGHT);//设置窗口显示 this.setVisible(true);} public static void main(String[] args){ Demo t= new Demo(); new Thread(t).start();}@Override public void run(){ for(int i= 0; i< 100; i++){ try{ Thread.sleep(100);} catch(InterruptedException e){ e.printStackTrace();} progressbar.setValue(i);} JOptionPane.showMessageDialog(this,"加载完成"); this.dispose();}}效果图:
谁给一个“进度条”的思路
http://java.sun.com/docs/books/tutorial/uiswing/components/progress.html
这个页面有几个demo.不过我建议你使用org.jdesktop.application.Task这个SwingWorker的子类,他本身包含了一个进度条,你只要在doInBackground方法设置进度值就行了,启动使用Task的execute方法他就会启动一个线程运行你doInBackground里面的内容。操作完毕你可以在succeeded方法中处理关闭数据库连接之类的操作。你只要在添加数据条目增加后通知进度条的值就可以了,他的值是0到100,所以你要计算已经处理的数据占总数据的百分比乘以100给他。当然你也可以自己直接使用SwingWorker,用法和task差不多,你去看api就知道了。给你一个类子:
public class ProgressMonitorDemo extends JPanel
implements ActionListener,
PropertyChangeListener{
private ProgressMonitor progressMonitor;
private JButton startButton;
private JTextArea taskOutput;
private MyTask task;
class MyTask extends SwingWorker<Void, Void>{
@Override
public Void doInBackground(){
Random random= new Random();
int progress= 0;
setProgress(0);
try{
Thread.sleep(1000);
while(progress< 100&&!isCancelled()){
//Sleep for up to one second.
Thread.sleep(random.nextInt(1000));
//Make random progress.
progress+= random.nextInt(10);
setProgress(Math.min(progress, 100));
}
} catch(InterruptedException ignore){
}
return null;
}
@Override
public void done(){
Toolkit.getDefaultToolkit().beep();
startButton.setEnabled(true);
progressMonitor.setProgress(0);
}
}
public ProgressMonitorDemo(){
super(new BorderLayout());
//Create the demo's UI.
startButton= new JButton("Start");
startButton.setActionCommand("start");
startButton.addActionListener(this);
taskOutput= new JTextArea(5, 20);
taskOutput.setMargin(new Insets(5, 5, 5, 5));
taskOutput.setEditable(false);
add(startButton, BorderLayout.PAGE_START);
add(new JScrollPane(taskOutput), BorderLayout.CENTER);
setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
}
/**
* Invoked when the user presses the start button.
*/
public void actionPerformed(ActionEvent evt){
progressMonitor= new ProgressMonitor(ProgressMonitorDemo.this,
"Running a Long Task",
"", 0, 100);
progressMonitor.setNote("123");
progressMonitor.setProgress(0);
task= new MyTask();
task.addPropertyChangeListener(this);
task.execute();
startButton.setEnabled(false);
}
/**
* Invoked when task's progress property changes.
*/
public void propertyChange(PropertyChangeEvent evt){
if("progress".equals( evt.getPropertyName())){
int progress=(Integer) evt.getNewValue();
progressMonitor.setProgress(progress);
String message=
String.format("Completed%d%%.\n", progress);
// progressMonitor.setNote(message);
taskOutput.append(message);
if(progressMonitor.isCanceled()|| task.isDone()){
Toolkit.getDefaultToolkit().beep();
if(progressMonitor.isCanceled()){
task.cancel(true);
taskOutput.append("Task canceled.\n");
} else{
taskOutput.append("Task completed.\n");
}
startButton.setEnabled(true);
}
}
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI(){
//Create and set up the window.
JFrame frame= new JFrame("ProgressMonitorDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
JComponent newContentPane= new ProgressMonitorDemo();
newContentPane.setOpaque(true);//content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args){
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable(){
public void run(){
createAndShowGUI();
}
});
}
}
java编程:怎么写进度条高手进哈
进度条有三种思路:
1.人为的划分某些标识,达到某个标识就是完成了百分之多少。
2.如果是上传和下载附件,可以将文件大小作为100%,上传或下载百分之多少,就是百分之多少。
3.对进度的类型所需时间进行分类。划出几种时间。属于某类,大概或平均完成时间是多少,那么就以这个时间作为100%。然后产生进度。
但,完美的进度是不可能实现的,因为你总不能先跑一遍确定时间。而且就算完全相同的条件,跑两遍的时间也不能一定相等的。所以我们只能通过各种技巧来使进度条更加自然真实。
最后,现在很多地方都不用进度条了,全部都是一个转动的圆圈等等。因为当你进度卡在10%半个小时,然后瞬间涨到99%,进度条已经就没什么意义了。
java 做进度条 进度数据获取
实现这个功能比较简单,用到的类有两个:ProgressMonitorInputStream(主要是整个类)和 ProgressMonitor,在javax.swing中整个文件的大小,和当前已经读取文件的大小,获得整个文件大小的方法
代码如下:
ProgressMonitorInputStream monitor;
/**
*@param表示此进度条要依附在哪个组件上
*@param显示在此进度条上的消息
*@param需要监控的输入流
*/
monitor= new ProgressMonitorInputStream(null,"Loading",new FileInputStream("filename path"));
int all= monitor.available();//整个文件的大小
int in= monitor.read(data);//每次读取文件的大小
例如:你每次读一行str=in.readLine();则data=str.instr.getBytes()+1;这里+1,主要是为了获得换行符的字节数,否则,最后获得的进步无法达到100%
代码如下:
int readed=0;//表示已经读取的文件
reader+=in;//累加读取文件大小
计算进度:
代码如下:
float process=(float) readed/ all* 100;//算出百分比
窗口显示:
代码如下:
progressMonitor.setNote("archived"+ process+"%");//显示在进度条上
感谢您花时间阅读本文!我们希望通过对java进度条的问题进行探讨,为您提供了一些有用的见解和解决方案。如果您需要更多帮助或者有其他疑问,请不要犹豫与我们联系。