源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

SWT(JFace)体验之ProgressBar

  • 时间:2020-09-11 16:54 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:SWT(JFace)体验之ProgressBar
先看代码: ProgressBarExamples.java
[u]复制代码[/u] 代码如下:
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
[u]复制代码[/u] 代码如下:
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(); } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部