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;
}
}