Java 将SWT progressbar切换为不确定(替换小部件)
似乎不可能将单个SWT progressbar小部件的状态从确定切换到不确定(SWT.indeterminate)并返回。 我希望这样做是基于用户交互,这可能是经常,所以处置和重建可能不是最好的主意 我尝试的解决方案是隐藏确定条,显示不确定条,并强制重新布局父组合Java 将SWT progressbar切换为不确定(替换小部件),java,user-interface,swt,progress-bar,Java,User Interface,Swt,Progress Bar,似乎不可能将单个SWT progressbar小部件的状态从确定切换到不确定(SWT.indeterminate)并返回。 我希望这样做是基于用户交互,这可能是经常,所以处置和重建可能不是最好的主意 我尝试的解决方案是隐藏确定条,显示不确定条,并强制重新布局父组合 但是,通过执行此操作,条形图将不会在同一位置重新出现,这表明隐藏元素占用了其空间。是否可以进行就地更换?请参阅。使用StackLayout和两个ProgressBar实例。或者,将JProcessBar与#setUndetermina
但是,通过执行此操作,条形图将不会在同一位置重新出现,这表明隐藏元素占用了其空间。是否可以进行就地更换?请参阅。使用StackLayout和两个ProgressBar实例。或者,将JProcessBar与
#setUndeterminate(布尔值)
一起使用。您只需将进度条
包装成一个复合文件
,然后在需要更改时处置()
它,并使用您想要的样式创建一个新的进度条
:
private static ProgressBar bar;
private static boolean indeterminate = false;
public static void main(String[] args)
{
final Display display = Display.getDefault();
final Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
new Button(shell, SWT.PUSH).setText("Above");
final Composite barParent = new Composite(shell, SWT.NONE);
barParent.setLayout(new GridLayout(1, false));
barParent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
bar = new ProgressBar(barParent, SWT.SMOOTH);
bar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
bar.setMaximum(10);
bar.setSelection(5);
new Button(shell, SWT.PUSH).setText("Below");
final Runnable timer = new Runnable()
{
public void run()
{
if (bar.isDisposed())
return;
indeterminate = !indeterminate;
bar.dispose();
bar = new ProgressBar(barParent, indeterminate ? SWT.INDETERMINATE : SWT.SMOOTH);
bar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
bar.setMaximum(10);
bar.setSelection(5);
barParent.layout();
display.timerExec(2000, this);
}
};
display.timerExec(2000, timer);
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
不确定:
平滑的: