SWT(JFace)体验之ProgressBar

页面导航:首页 > 软件编程 > Java编程 > SWT(JFace)体验之ProgressBar

SWT(JFace)体验之ProgressBar

来源:互联网 作者:脚本宝典 时间:2015-07-30 13:05 【

先看代码: ProgressBarExamples.java 复制代码 代码如下: package swt_jface.demo8; import org.eclipse.swt.SWT; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.Fo

先看代码: 
ProgressBarExamples.java 

复制代码代码如下:


package swt_jface.demo8; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.events.PaintEvent; 
import org.eclipse.swt.events.PaintListener; 
import org.eclipse.swt.graphics.Font; 
import org.eclipse.swt.graphics.FontMetrics; 
import org.eclipse.swt.graphics.Point; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Label; 
import org.eclipse.swt.widgets.ProgressBar; 
import org.eclipse.swt.widgets.Shell; 
public class ProgressBarExamples { 

Display display = new Display(); 
Shell shell = new Shell(display); 
public ProgressBarExamples() { 
ProgressBar pb1 = new ProgressBar(shell, SWT.NULL); 
final ProgressBar pb2 = new ProgressBar(shell, SWT.SMOOTH); 
ProgressBar pb3 = new ProgressBar(shell, SWT.INDETERMINATE); 

pb2.addPaintListener(new PaintListener() { 
public void paintControl(PaintEvent e) { 
Point point = pb2.getSize(); 

Font font = new Font(shell.getDisplay(),"Courier",10,SWT.BOLD); 
e.gc.setFont(font); 
e.gc.setForeground(shell.getDisplay().getSystemColor(SWT.COLOR_WHITE)); 

FontMetrics fontMetrics = e.gc.getFontMetrics(); 
int stringWidth = fontMetrics.getAverageCharWidth() * 4; 
int stringHeight = fontMetrics.getHeight(); 

e.gc.drawString("60%", (point.x-stringWidth)/2 , (point.y-stringHeight)/2, true); 
font.dispose(); 

}); 

pb1.setSelection(60); 
pb2.setSelection(60); 

pb1.setBounds(100, 10, 200, 20); 
pb2.setBounds(100, 40, 200, 20); 
pb3.setBounds(100, 70, 200, 20); 

Label label = new Label(shell, SWT.NULL); 
label.setText("(default)"); 
Label label2 = new Label(shell, SWT.NULL); 
label2.setText("SWT.SMOOTH"); 

label.setAlignment(SWT.RIGHT); 
label2.setAlignment(SWT.RIGHT); 
label.setBounds(10, 10, 80, 20); 
label2.setBounds(10, 40, 80, 20); 

shell.pack(); 
shell.open(); 

while (!shell.isDisposed()) { 
if (!display.readAndDispatch()) { 
display.sleep(); 


display.dispose(); 

public static void main(String[] args) { 
new ProgressBarExamples(); 

}


再来一个例子: 
CountNumbers.java 

复制代码代码如下:


package swt_jface.demo8; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.events.PaintEvent; 
import org.eclipse.swt.events.PaintListener; 
import org.eclipse.swt.graphics.Font; 
import org.eclipse.swt.graphics.FontMetrics; 
import org.eclipse.swt.graphics.Point; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Button; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Event; 
import org.eclipse.swt.widgets.Listener; 
import org.eclipse.swt.widgets.ProgressBar; 
import org.eclipse.swt.widgets.Shell; 
public class CountNumbers { 

Display display = new Display(); 
Shell shell = new Shell(display); 
Button button; 
ProgressBar progressBar; 

public CountNumbers() { 
GridLayout gridLayout = new GridLayout(1, true); 
shell.setLayout(gridLayout); 

button = new Button(shell, SWT.BORDER); 
button.setText("Start to count"); 

progressBar = new ProgressBar(shell, SWT.SMOOTH); 
progressBar.setMinimum(0); 
progressBar.setMaximum(10); 

final Thread countThread = new Thread(){ 
public void run() { 
for(int i=0; i<=10; i++) { 
final int num = i; 
try { 
Thread.sleep(1000); 
} catch (InterruptedException e) { 
e.printStackTrace(); 

shell.getDisplay().asyncExec(new Runnable(){ 
public void run() { 
if(button.isDisposed() || progressBar.isDisposed()) return; 
button.setText("Counting: " + num); 
progressBar.setSelection(num); 
//progressBar.redraw(); 

}); 


}; 

button.addListener(SWT.Selection, new Listener() { 
public void handleEvent(Event event) { 
button.setEnabled(false); 
countThread.start(); 

}); 

progressBar.addPaintListener(new PaintListener() { 
public void paintControl(PaintEvent e) { 
System.out.println("PAINT"); 
String string = (progressBar.getSelection() * 1.0 /(progressBar.getMaximum()-progressBar.getMinimum()) * 100) + "%"; 
Point point = progressBar.getSize(); 
Font font = new Font(shell.getDisplay(),"Courier",10,SWT.BOLD); 
e.gc.setFont(font); 
e.gc.setForeground(shell.getDisplay().getSystemColor(SWT.COLOR_WHITE)); 
FontMetrics fontMetrics = e.gc.getFontMetrics(); 
int stringWidth = fontMetrics.getAverageCharWidth() * string.length(); 
int stringHeight = fontMetrics.getHeight(); 
e.gc.drawString(string, (point.x-stringWidth)/2 , (point.y-stringHeight)/2, true); 
font.dispose(); 

}); 

button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 
progressBar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 
shell.setSize(300, 100); 
shell.open(); 
while (!shell.isDisposed()) { 
if (!display.readAndDispatch()) { 
display.sleep(); 


display.dispose(); 

public static void main(String[] args) { 
new CountNumbers(); 

}


Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<