1 つのシェル内でさまざまな画面を使用するゲームを作成しており、SWT で複合サブクラスを使用して画面を変更しようとしていますが、コードを実行すると、サブクラスに追加されたウィジェットが表示されません。
コンポジットを呼び出すメインコード -
Button newGameButton = new Button(startComposite, SWT.PUSH);
FormData fd_newGameButton = new FormData();
fd_newGameButton.left = new FormAttachment(0, 296);
newGameButton.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
newGameButton.setText("New Game");
newGameButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent event) {
if (fullScreen == true) {
startComposite.dispose();
shell.setFullScreen(true);
} else {
startComposite.dispose();
}
GameComposite gameComposite = new GameComposite(shell, SWT.NONE);
gameComposite.setLayout(new GridLayout(1, false));
gameComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
}
public void widgetDefaultSelected(SelectionEvent event) {
if (fullScreen == true) {
startComposite.dispose();
shell.setFullScreen(true);
} else {
startComposite.dispose();
}
GameComposite gameComposite = new GameComposite(shell, SWT.NONE);
gameComposite.setLayout(new GridLayout(1, false));
gameComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
そして、これはサブクラスのコードです -
public class GameComposite extends Composite {
private Text text;
/**
* Create the composite.
* @param parent
* @param style
*/
public GameComposite(Composite parent, int style) {
super(parent, style);
Group gamePanel = new Group(this, SWT.NONE);
gamePanel.setText("GamePanel1");
gamePanel.setBounds(518, 10, 196, 502);
text = new Text(this, SWT.BORDER);
text.setEditable(false);
text.setBounds(10, 418, 285, 94);
}
@Override
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components
}
}