每次打开一个shell

时间:2013-12-26 11:53:45

标签: java shell swt

在我的项目中我有一个shell,在shell中有3个按钮,我希望点击每个按钮会打开一个shell,但我想要如果一个shell已经打开,因为点击一个按钮然后将关闭该shell并打开一个新shell。 (我不想要点击按钮同时打开2个shell) 但我不知道该怎么做。

在这个类中,shell的开放应该是。

public class ClickLabel implements MouseListener
{
        Shell shell;
        int p;
        public ClickLabel(int p)
        {
            shell = new Shell();
            this.p = p;
        }   
        @Override
        public void mouseDoubleClick(MouseEvent e) {}
        @Override
        public void mouseDown(MouseEvent e) {}
        @Override
        public void mouseUp(MouseEvent e) {
             shell.open();              
        }
}

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

以下是使用按钮和一个活动Shell的简单示例,请检查:

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class Example{
    public static void main(String[] args) {
        new Example();
    }

    private Shell openedShell;

    public Example() {
        final Display display = new Display ();
        Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());
        SelectionAdapter adapter = new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                if(openedShell != null){
                    openedShell.dispose();
                }
                openedShell = new Shell(display);
                openedShell.setSize(200,200);
                openedShell.setText(((Button)e.getSource()).getText());
                openedShell.open();
            }
        };
        for(int i =1;i<4;i++){
            Button b = new Button(shell, SWT.PUSH); 
            b.setText("shell "+i);
            b.addSelectionListener(adapter); 
            b.pack();
        }

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