?? progressbar3.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 + -