我正在尝试实现一个非常基本的目标,在.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);
}
}
如何在第二个复合类中添加第一个复合类?在设计模式中有办法吗?我做对了吗?
答案 0 :(得分:2)
我对第二部分中使用的一些对象以及它们与第一部分中的自定义Composite的关系有点困惑,但我要注意的主要是你没有设置布局在您的自定义CompTest对象上。无论何时使用SWT小部件,他们都需要驻留在具有布局设置的父级复合材料上,否则不会显示任何内容。我不相信设置任意边界会解决这个限制。
另请注意,Composite和Canvas是可自动扩展的,您不需要覆盖“checkSubclass”方法。
答案 1 :(得分:1)
是的,您可以在WindowBuilder中使用自己的控件,有关详细信息,请参阅documentation。