进度条这种东西信任小伙伴们都见过,它能够让我们对加载的事物有愈加清晰的了解,这次我们就来看看在java中该怎么完成进度条。
代码实例:
packageorg.ubird;
importjava.awt.BorderLayout;
importjava.awt.Dimension;
importjava.awt.Image;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.concurrent.ExecutionException;
importjavax.imageio.ImageIO;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
importjavax.swing.JProgressBar;
importjavax.swing.JScrollPane;
importjavax.swing.SwingUtilities;
importjavax.swing.SwingWorker;
publicclassTestSwingWorkerextendsSwingWorker<List<Image>,String>
{
privateJLabelstatus;
privateJPanelviewer;
privateString[]imagesName;
privateJProgressBarjpb;
publicstaticvoidmain(String[]args)
{
SwingUtilities.invokeLater(newRunnable()
{
publicvoidrun()
{
TestFrameframe=newTestFrame();
finalJPanelpanel=newJPanel();
finalJLabellabel=newJLabel();
finalString[]imagesName=newString[38];
for(inti=0;i<imagesName.length;i++)
{
imagesName[i]=”res/1(“+(i+1)+”).jpg”;
}
JScrollPanesp=newJScrollPane(panel);
sp.setSize(newDimension(700,500));
frame.add(sp,BorderLayout.CENTER);
JPanelstp=newJPanel();
finalJProgressBarjpb=newJProgressBar();
jpb.setMinimum(1);
jpb.setMaximum(imagesName.length);
stp.add(jpb);
stp.add(label);
frame.add(stp,BorderLayout.SOUTH);
JButtonbutton=newJButton(“loadimage”);
button.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
TestSwingWorkersw=newTestSwingWorker(label,panel,imagesName,jpb);
sw.execute();
}
});
frame.add(button,BorderLayout.NORTH);
frame.setVisible(true);
}
});
}
publicTestSwingWorker(JLabelstatus,JPanelviewer,String[]imagesName,JProgressBarjpb)
{
this.status=status;
this.viewer=viewer;
this.imagesName=imagesName;
this.jpb=jpb;
}
@Override
protectedList<Image>doInBackground()throwsException
{
List<Image>image=newArrayList<Image>();
for(inti=0;i<imagesName.length;i++)
{
image.add(ImageIO.read(getClass()
.getClassLoader()
.getResource(imagesName[i])));
publish(“已经加载了”+(i+1)+”/”+imagesName.length+”:”+imagesName[i]);
}
returnimage;
}
@Override
protectedvoidprocess(List<String>chunks)
{
status.setText(chunks.get(chunks.size()-1));
intx=Integer.parseInt(chunks.get(chunks.size()-1)
.substring(chunks.get(chunks.size()-1)
.indexOf(“(“)+1,chunks.get(chunks.size()-1)
.indexOf(“)”))
.trim());
jpb.setValue(x);
for(Stringstr:chunks)
{
System.out.println(str);
}
}
@Override
protectedvoiddone()
{
try
{
for(Imageimage:get())
{
JLabellabel=newJLabel(newImageIcon(image));
label.setSize(160,120);
label.setPreferredSize(newDimension(160,120));
viewer.add(label);
}
}
catch(InterruptedExceptione)
{
e.printStackTrace();
}
catch(ExecutionExceptione)
{
e.printStackTrace();
}
}
}
packageorg.ubird;
importjavax.swing.JFrame;
publicclassTestFrameextendsJFrame
{
publicTestFrame()
{
setTitle(“TestFrame”);
setSize(800,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

java

java实时显示方法

最近小编开端做项目了,是关于音乐播放器的项目。其间小编遇到了许多许多的问题,其间最大的问题便是音乐播放器进展条的问题。Java的SWT中是有自带的进展条的,可是那个进展条实在是不怎么美观,因而,小编请教了他人,并查阅了有关的资料,然后实现了进展条。下面便是实现进展的代码:
publicvoidpaintControl(PaintEvente){
if(!isDrag){
progressPoint.setLocation((int)(progress*getBounds().width),0);
GCgc=newGC(this);
e.gc.setLineWidth(5);
e.gc.setForeground(newColor(getDisplay(),192,192,192));
e.gc.drawLine(0,4,getBounds().width,4);
e.gc.setForeground(newColor(getDisplay(),30,204,148));
e.gc.drawLine(0,4,(int)(progress*getBounds().width),4);
}
}
其实这其间的原理很简单,便是在一个指定的面板上,话相应长度的线,在划线的同时,所插入的点的图片也跟着相应移动,但小编在做这个项目的时候却没有想到这一点,仍是请教了他人之后才理解的。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。