首页编程java进度条?Java中如何实现进度条效果

java进度条?Java中如何实现进度条效果

编程之家2023-11-0777次浏览

大家好,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{

java进度条?Java中如何实现进度条效果

private ProgressMonitor progressMonitor;

private JButton startButton;

private JTextArea taskOutput;

private MyTask task;

class MyTask extends SwingWorker<Void, Void>{

@Override

java进度条?Java中如何实现进度条效果

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进度条的问题进行探讨,为您提供了一些有用的见解和解决方案。如果您需要更多帮助或者有其他疑问,请不要犹豫与我们联系。

茶叶品牌推广?茶叶品牌推广方案公司邮箱购买,公司邮箱一般多少钱