开发者

SWT(JFace)体验之ProgressBar

先看代码:

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();

}

}

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜