⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 progressbar3.java

📁 SWTJFace篇项目源程序该项目包含 包含了Eclipse下构建swt的基本工程
💻 JAVA
字号:
package cn.com.chengang.swt;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
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 ProgressBar3 {
	private Display display;
	private Shell shell;
	private Composite statusbar;
	private Label statusbarLabel;
	private ProgressBar progressBar;
	private Button hideProbarButton;

	public static void main(String[] args) {
		new ProgressBar3().open();
	}

	private void open() {
		display = Display.getDefault();
		shell = new Shell();
		shell.setSize(250, 170);
		// ---------创建窗口中的其他界面组件-------------
		shell.setLayout(new GridLayout());
		createMainComp(shell);// 创建主面板
		createStatusbar(shell);// 创建工具栏
		// -----------------END------------------------
		shell.layout();
		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		display.dispose();
	}

	private void createMainComp(Composite parent) {
		Composite comp = new Composite(parent, SWT.BORDER);
		comp.setLayoutData(new GridData(GridData.FILL_BOTH));
		comp.setLayout(new RowLayout());
		createButton(comp);
	}

	private void createButton(Composite parent) {
		final Button b1 = new Button(parent, SWT.NONE);
		b1.setText("隐藏状态栏");
		b1.addSelectionListener(new SelectionAdapter() {
			private boolean flag = true;

			public void widgetSelected(SelectionEvent e) {
				// 用statusbar.setVisible(false)来隐藏状态栏是不够的,还必须把它占用的空间也释放出来,这时应该用GridData.exclude
				GridData data = (GridData) statusbar.getLayoutData();
				data.exclude = flag;
				shell.layout();
				b1.setText((flag ? "显示" : "隐藏") + "状态栏");
				flag = !flag;
			}
		});
		hideProbarButton = new Button(parent, SWT.NONE);
		hideProbarButton.setText("隐藏进度条");
		hideProbarButton.setEnabled(false);
		hideProbarButton.addSelectionListener(new SelectionAdapter() {
			private boolean flag = false;

			public void widgetSelected(SelectionEvent e) {
				progressBar.setVisible(flag);
				hideProbarButton.setText((flag ? "隐藏" : "显示") + "进度条");
				flag = !flag;
			}
		});
		final Button b3 = new Button(parent, SWT.NONE);
		b3.setText(" GO ");
		b3.addSelectionListener(new SelectionAdapter() {
			private boolean stopFlag = true;

			public void widgetSelected(SelectionEvent e) {
				stopFlag = !stopFlag;
				if (stopFlag)// 根据停止标志stopFlag来判断是停止还是运行
					stop();
				else
					go();
			}

			private void stop() {
				b3.setEnabled(false);// 停止需要时间,在完全停止前要防止再次开始。
				b3.setText("GO");
			}

			private void go() {
				b3.setText("STOP");
				progressBar = createProgressBar(statusbar);
				hideProbarButton.setEnabled(true);
				statusbar.layout();// 重新布局一下工具栏,使进度条显示出来
				new Thread() {
					public void run() {
						for (int i = 1; i < 11; i++) {
							if (display.isDisposed() || stopFlag) {
								disposeProgressBar();
								return;
							}
							moveProgressBar(i);
							try {
								Thread.sleep(1000);
							} catch (Throwable e2) {} // 间隔一秒
						}
						disposeProgressBar();
					}

					private void moveProgressBar(final int i) {
						display.asyncExec(new Runnable() {
							public void run() {
								if (!statusbarLabel.isDisposed())
									statusbarLabel.setText("前进到第" + i + "步");
								if (!progressBar.isDisposed())
									progressBar.setSelection(i * 10);
							}
						});
					}

					private void disposeProgressBar() {
						if (display.isDisposed())
							return;
						display.asyncExec(new Runnable() {
							public void run() {
								hideProbarButton.setEnabled(false);
								// 这一句不能放在线程外执行,否则progressBar被创建后就立即被dispose了
								progressBar.dispose();
								b3.setEnabled(true);
							}
						});
					}
				}.start();
			}
		});
	}

	private void createStatusbar(Composite parent) {
		statusbar = new Composite(parent, SWT.BORDER);
		// 设置工具栏在Shell中的形状为水平抢占充满,并高19像素
		GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
		gridData.heightHint = 19;
		statusbar.setLayoutData(gridData);
		// 设置为用行列式布局管理状态栏里的组件
		RowLayout layout = new RowLayout();
		layout.marginLeft = layout.marginTop = 0; // 无边距
		statusbar.setLayout(layout);
		// 创建一个用于显示文字的标签
		statusbarLabel = new Label(statusbar, SWT.BORDER);
		statusbarLabel.setLayoutData(new RowData(70, -1));
	}

	// 创建进度条
	private ProgressBar createProgressBar(Composite parent) {
		ProgressBar progressBar = new ProgressBar(parent, SWT.SMOOTH);
		progressBar.setMinimum(0); // 最小值
		progressBar.setMaximum(100);// 最大值
		return progressBar;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -