gpt4 book ai didi

java - 切换 swt 小部件的 setVisibility

转载 作者:行者123 更新时间:2023-12-02 11:31:25 26 4
gpt4 key购买 nike

我有一个 TitleAreaDialog ,其中有几个按钮和一个 ProgressBar,选择任何按钮后将执行某些操作,所以我需要 ProgressBar 指示用户某些操作正在进行中。由于时间未知,我正在全局创建进度条,类型为 SWT.INDETERMINATEsetVisibility(false) (以便仅在触发时才会显示进度)按钮监听器)并且每当按下按钮时都会执行以下操作,

  1. progressBar.setVisible(true)
  2. 执行操作(进度条应处于 Activity 状态,即应显示为正在加载)
  3. progressBar.setVisible(false)

这是正确的方法吗?因为我没有得到想要的输出。我需要进度条仅在执行操作时可用/可见,而不是在整个对话框生命周期中可用。

最佳答案

当您的按钮操作在 UI 线程中运行时,进度条无法更新。您可以使用作业在后台执行操作:

public class MyLayout {
public static void main (String [] args) {
final Display display = new Display ();
Shell shell = new Shell (display);
RowLayout rowLayout = new RowLayout ();
shell.setLayout (rowLayout);

Button button = new Button (shell, SWT.PUSH);
button.setText ("button0");

final ProgressBar progressbar = new ProgressBar (shell, SWT.NONE);
progressbar.setSelection (50);
progressbar.setVisible(false);

button.addListener(SWT.Selection, new Listener() {

@Override
public void handleEvent(Event event) {
progressbar.setVisible(true);
// make a background operation
Job job = new Job("Button...") {

@Override
protected IStatus run(IProgressMonitor monitor) {
// do the button operation...
return Status.OK_STATUS;
}
};
job.addJobChangeListener(new JobChangeAdapter() {

@Override
public void done(IJobChangeEvent jobEvent) {
// update progressbar in UI thread
display.syncExec(new Runnable() {

@Override
public void run() {
progressbar.setVisible(false);
}
});
}

});
job.schedule();
}
});

shell.pack ();
shell.open ();

while (!shell.isDisposed ()) {
if (!display.readAndDispatch ())
display.sleep ();
}
display.dispose ();
}
}

但是作业本身还提供了一个监视器来向用户显示操作正在进行中。

关于java - 切换 swt 小部件的 setVisibility,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49277241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com