Ação do Botão para chamar outra tela - SWT

Boa tarde pessoal,

to com o seguinte problema: Tenho um tela e quando eu clicar sobre um botão abre outra tela.
fiz assim e não da certo.

ap01.addListener(SWT.Selection, new Listener(){
public  void handleEvent(Event event) {

//tentando instanciar outra classe no evento do botão
frmCad_Apart  cad = new frmCad_Apart();
	
	
			}});
	
	}

Em Swing isso da certo se instaciar a classe desta forma. Como se faz isso em SWT?

a Stack é essa:

Exception in thread "main" org.eclipse.swt.SWTException: Invalid thread access

o mais fácil seria sua tela implementar “ActionListener”…
com isso vc obrigatoriamente vc vai ter um método "actionPerformed"
pegue o seu botão e jogue um nome nele botão.setName(nome) // nome do seu botão,
botão.addActionListener(this) // está falando que as ações desse botão vão ser controladas por essa tela.
No método “actionPerformed” pega o seu componente…
Component component = (Component) e.getSource()
faz uma validação se o nome “component” for igual ao nome do botão chame a tela que vc quer.
Se não conseguir, vai no Google :lol:

Em SWT não consegui implementar ActionListener. O que você me descreveu é exatamente o que teria que fazer em Swing. Tentei fazer desta forma, e não deu certo.
To pesquisando, e pelo que eu achei, dentro desta minha tela terei que chamar um “Dialog” e não outra tela igual a ela.

Após pesquisar bastante desenvolvi uma solução. Abaixo segue o codigo de uma classe [b]pai/b que chama a classe [b]filho/b em SWT. Espero que esse codigo possa ajudar alguem.

Código da Classe “Pai”:

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class Pai {

	private Shell sShell = null;  
	private Button btnPai = null;

	public Pai() {
		
	}

	public static void main(String[] args) {
		
		Display display = Display.getDefault();
		Pai thisClass = new Pai();
		thisClass.createSShell();
		thisClass.sShell.open();

		while (!thisClass.sShell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		display.dispose();
	}

	private void createSShell() {
		sShell = new Shell();
		sShell.setText("Shell");
		sShell.setSize(new Point(300, 200));
		sShell.setLayout(null);
		btnPai = new Button(sShell, SWT.NONE);
		btnPai.setBounds(new Rectangle(55, 73, 167, 39));
		btnPai.setText("Clicar");
		btnPai.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
			
			public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
				btnPai.addSelectionListener(new org.eclipse.swt.events.SelectionListener(){
				
					public void widgetSelected(org.eclipse.swt.events.SelectionEvent e){
						
						Filho Filho = new Filho(new Shell());
						Shell dialog = Filho.Dialog();
						
						Point dialogSize = Filho.getSize();
						org.eclipse.swt.graphics.Rectangle shellBounds= sShell.getBounds();
						
						dialog.setLocation(80,90);
						Display display = dialog.getDisplay();
						dialog.open();
						
						while(!dialog.isDisposed()){
							if(!display.readAndDispatch())
								display.sleep();
						}
	
					}
			
				public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e){}});
				
				
			}
		});
	}

}

Código da Classe “Filho”

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class Filho extends Dialog {

	private Shell dialog = null;  
	private Button button = null;
	private Text text = null;
	private Point dialogSize;
	
	public Filho(Shell parent) {
		super(parent);
		
	}

	public Filho(Shell parent, int style) {
		super(parent, style);
		
	}

	
	private void createDialog() {
		dialog = new Shell(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
		dialog.setLayout(null);
		dialog.setSize(new org.eclipse.swt.graphics.Point (300,300));
		button = new Button(dialog, SWT.NONE);
		button.setBounds(new Rectangle(31, 40, 232, 83));
		button.setText("Escrever");
		dialogSize = dialog.getSize();
		
		button.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
			public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
				text.setText("Fui clicado");
				//dialog.dispose();
			}
		});
		
		text = new Text(dialog, SWT.BORDER);
		text.setBounds(new Rectangle(29, 144, 230, 80));
	}
	public Point getSize(){
		return dialogSize;
		
	}
	public Shell Dialog(){
		createDialog();
		return dialog;
	}

}