先看代码: 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 Progres开发者_开发教程sBar(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.wid编程客栈gets.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); But编程客栈ton 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 Liwww.devze.comstener() { 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(); } }
精彩评论