1

今天,我想使用 Eclipse 创建一个简单的 Java SWT GUI 应用程序,但为了更清楚起见,我希望将每个子窗口都放在不同的类中。由于我对 Java 编程很陌生,有没有办法让不同的类只通过调用一个方法来完成它的事情?我在互联网上到处寻找,但找不到我要找的东西......

这是我到目前为止所拥有的

Button foo = new Button(shell, SWT.PUSH);
foo.setText("Edit");
foo.addListener(SWT.Selection, new Listener() {
    public void handleEvent(Event e) {
        switch (e.type) {
            case SWT.Selection:
                // Call the other Class file here
                break;
        }
    }
});
4

1 回答 1

8

是的。有可能的。不过,我不会将其称为“调用类”,而是用 SWT 术语“打开另一个窗口”。

您只需将 a 包装Shell在其他类中,然后open()从“外部”调用 API。

如果你想编辑一些东西,你甚至可以创建向导


有很多方法可以做你想做的事,我只是选择了一个简单的版本。但这不是唯一的方法。等巴兹回答,他会举出另一个很酷的例子。;)

我建议您也阅读Shell's javadoc。

例子:

ShellTest.class(作为 Java 应用程序运行)

/**
 * 
 * @author ggrec
 *
 */
public class ShellTest
{

    // ==================== 2. Instance Fields ============================

    private AnotherShell anotherShell;


    // ==================== 3. Static Methods =============================

    public static void main(final String[] args)
    {
        new ShellTest();
    }


    // ==================== 4. Constructors ===============================

    private ShellTest()
    {
        final Display display = new Display();
        final Shell shell = new Shell(display);
        shell.setLayout(new GridLayout(1, false));

        anotherShell = new AnotherShell();

        createContents(shell);

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


    // ==================== 5. Creators ===================================

    private void createContents(final Composite parent)
    {
        final Button buttonOpen = new Button(parent, SWT.PUSH);
        buttonOpen.setText("Open");

        buttonOpen.addSelectionListener(new SelectionAdapter()
        {
            @Override public void widgetSelected(final SelectionEvent e)
            {
                anotherShell.open();
            }
        });

        final Button buttonClose = new Button(parent, SWT.PUSH);
        buttonClose.setText("Close");

        buttonClose.addSelectionListener(new SelectionAdapter()
        {
            @Override public void widgetSelected(final SelectionEvent e)
            {
                anotherShell.close();
            }
        });
    }
}

AnotherShell.class(这将是您的“其他类”)

/**
 * 
 * @author ggrec
 *
 */
public class AnotherShell
{

    // ==================== 2. Instance Fields ============================

    private Shell shell;


    // ==================== 4. Constructors ===============================

    public AnotherShell()
    {
        shell = new Shell(Display.getCurrent());
    }


    // ==================== 6. Action Methods =============================

    public void open()
    {
        shell.open();
    }

    public void close()
    {
               // Don't call shell.close(), because then
               // you'll have to re-create it
        shell.setVisible(false);
    }
}
于 2013-10-04T13:36:00.083 回答