java - SWT 应用程序中的复合 - Window Builder

标签 java swt windowbuilder

我试图实现一个非常基本的目标,这个目标在 .net 平台中曾经非常简单:创建一个可重用的组件并以另一种形式使用它。我尝试执行以下操作:

package ***.composites;

import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;

public class CompTest extends Composite {

    /**
     * Create the composite.
     * @param parent
     * @param style
     */
    public CompTest(Composite parent, int style) {
        super(parent, style);

        Composite composite = new Composite(this, SWT.NONE);
        composite.setBounds(10, 10, 273, 261);

        Button btnCheckButton = new Button(composite, SWT.CHECK);
        btnCheckButton.setBounds(82, 112, 93, 16);
        btnCheckButton.setText("Check Button");

    }

    @Override
    protected void checkSubclass() {
        // Disable the check that prevents subclassing of SWT components
    }

}

package ***.composites;

import org.eclipse.swt.widgets.Display;

public class WindTest {

    protected Shell shell;
    private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());

    /**
     * Launch the application.
     * @param args
     */
    public static void main(String[] args) {
        try {
            WindTest window = new WindTest();
            window.open();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Open the window.
     */
    public void open() {
        Display display = Display.getDefault();
        createContents();
        shell.open();
        shell.layout();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }

    /**
     * Create contents of the window.
     */
    protected void createContents() {
        shell = new Shell();
        shell.setSize(450, 377);
        shell.setText("SWT Application");

        Composite composite = formToolkit.createComposite(shell, SWT.NONE);
        composite.setBounds(10, 10, 173, 105);
        formToolkit.paintBordersFor(composite);

    }
}

如何在第二个复合类中添加第一个复合类?有办法在设计模式下做到这一点吗?我做的对吗?

最佳答案

我对第二部分中使用的一些对象以及它们与第一部分中的自定义复合体的关系有点困惑,但我要注意的主要事情是您没有设置布局在您的自定义 CompTest 对象上。每当您使用 SWT 小部件时,它们都需要驻留在已设置布局的父 Composite 中,否则将不会显示任何内容。我不认为设置任意界限可以解决该限制。

另请注意,Composite 和 Canvas 是自动可扩展的,您无需重写“checkSubclass”方法。

关于java - SWT 应用程序中的复合 - Window Builder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13253159/

相关文章:

java - android bootcamp 医疗计算器无法打开

java - 将项目从 jlist 添加到 jlist

java - 在 Swing 组布局中手动添加自定义组件

java - BindingResult 和 bean 名称 'userBean' 的普通目标对象都不能作为请求属性

java - 找不到合适的方法来替换(int,android.app.Fragment)

java - Swing - 如何混合使用 JTextField 和 JTextAreas 并具有相同的视觉外观?

java - SWT 无法在另一台计算机上运行

java - 在应用程序运行时,在 Java SWT 应用程序中添加/删除按钮。

java - 使用 exe4J 运行时滚动 SWT 表很慢

java - 是否可以将 Groovy 的 SwingBuilder 与 Java JFrame 子类结合起来?