Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将SWT progressbar切换为不确定(替换小部件)_Java_User Interface_Swt_Progress Bar - Fatal编程技术网

Java 将SWT progressbar切换为不确定(替换小部件)

Java 将SWT progressbar切换为不确定(替换小部件),java,user-interface,swt,progress-bar,Java,User Interface,Swt,Progress Bar,似乎不可能将单个SWT progressbar小部件的状态从确定切换到不确定(SWT.indeterminate)并返回。 我希望这样做是基于用户交互,这可能是经常,所以处置和重建可能不是最好的主意 我尝试的解决方案是隐藏确定条,显示不确定条,并强制重新布局父组合 但是,通过执行此操作,条形图将不会在同一位置重新出现,这表明隐藏元素占用了其空间。是否可以进行就地更换?请参阅。使用StackLayout和两个ProgressBar实例。或者,将JProcessBar与#setUndetermina

似乎不可能将单个SWT progressbar小部件的状态从确定切换到不确定(SWT.indeterminate)并返回。 我希望这样做是基于用户交互,这可能是经常,所以处置和重建可能不是最好的主意

我尝试的解决方案是隐藏确定条,显示不确定条,并强制重新布局父组合


但是,通过执行此操作,条形图将不会在同一位置重新出现,这表明隐藏元素占用了其空间。是否可以进行就地更换?

请参阅。使用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();
}
不确定:

平滑的: