Jump to content

Shell e Painel de SWT


M6
Go to solution Solved by Dabubble,

Recommended Posts

Ando um bocado "às aranhas" com o SWT e necessito de ajuda.

Por certo isto é fácil mas já perdi algum tempo de volta disto e não consigo encontrar a solução.  👍

Tenho um panel para fazer login, SystemLogin nl, onde tenho dois labels e respectivos texts para recolher o username e a password, extendido com uns métodos que não são relevantes para aqui.

O meu problema, que acredito ser "básico", é que quando selecciono a opção de login na janela principal, a janela Shell nlShell aparece com o painel mas a aplicação congela aí.

Do código que tenho, que listo abaixo, creio ser relevante apenas as seguintes linhas:

Shell nlShell = new Shell(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | SWT.SHELL_TRIM);

SystemLogin nl = new SystemLogin(nlShell, SWT.NORMAL);

while (nl.getUsername().trim() == "") {

nlShell.open();

}

stLog.append("\n\tUsername: " + nl.getUsername());

stLog.append("\n\tPassword: " + nl.getPassword());

/**
 * Get the user network login if necessary
 *
 */
private void getLogin() {
	Shell nlShell = new Shell(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | SWT.SHELL_TRIM);
	nlShell.setText("Network Login");
	nlShell.setLayout(null);
	nlShell.setSize(new Point(200, 200));
	SystemLogin nl = new SystemLogin(nlShell, SWT.NORMAL);
	nlShell.setMinimized(false);
	nlShell.setMaximized(false);
	Rectangle parentSize = sShell.getBounds();
	Rectangle mySize = nlShell.getBounds();
	int locationX = (parentSize.width - mySize.width) / 2 + parentSize.x;
	int locationY = (parentSize.height - mySize.height) / 2 + parentSize.y;
	nlShell.setLocation(locationX, locationY);			
	while (nl.getUsername().trim() == "") {
		nlShell.open();	
	}
	stLog.append("\n\tUsername: " + nl.getUsername());
	stLog.append("\n\tPassword: " + nl.getPassword());
}
10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Nunca mexi com swt, para mim so swing 😄 e provavelmente nao vou ajudar muito... mas 'as vezes ate' e' bom dar opinioes estupidas 👍

Ja' verificaste se o teu codigo bloqueia no while? pode estar a entrar em ciclo...

Dsc mas olhado para o que tens nao vejo nada de errado, nao usaria um objecto do tipo "Rectangle" para situar a tua "Shell" mas nao vejo ai erro, pelo menos de codigo...

Verifica se "parentSize" possui um valor correcto e se o teu ciclo nao se esta' a tornar infinito, de resto sem mais codigo para testar nao vejo probs.

Espero que por esta hora ja' tenhas resolvido o teu prob, ate'...

Uma pergunta: porque nao permites passwords com espacos no inicio e no fim? Se nao o fazes espero que digas aos teus utilizadores 😛

Link to comment
Share on other sites

Bem esta caso e um pouco complexo.

Nao sei se estas bem a par de como funciona SWT mas basicamente Shell e o pai de todos os composites (o SWT segue a composite design pattern) e é ele que detem a interaccao com o utilizador. Ora acontece que tu iniciate uma nova shell ou seja perdeste a anterior e nao consegues fazer com que anterior ganhe de novo a interaccao com o utilizador. O que tu provavelmente queres é abrir um Dialog onde pedes um login e nao uma nova Shell.

Se precisares de exemplos eu tenho bastantes mas sao um pouco complexos.

Boa sorte.

BTW: SWT rula e mm muito mais simples para fazer os programas normais que fazemos, swing so tem a cena de poderes construir os teus proprios componentes.

Link to comment
Share on other sites

Nunca mexi com swt, para mim so swing 😄 e provavelmente nao vou ajudar muito... mas 'as vezes ate' e' bom dar opinioes estupidas 😛

Ja' verificaste se o teu codigo bloqueia no while? pode estar a entrar em ciclo...

Dsc mas olhado para o que tens nao vejo nada de errado, nao usaria um objecto do tipo "Rectangle" para situar a tua "Shell" mas nao vejo ai erro, pelo menos de codigo...

Verifica se "parentSize" possui um valor correcto e se o teu ciclo nao se esta' a tornar infinito, de resto sem mais codigo para testar nao vejo probs.

Espero que por esta hora ja' tenhas resolvido o teu prob, ate'...

Uma pergunta: porque nao permites passwords com espacos no inicio e no fim? Se nao o fazes espero que digas aos teus utilizadores 😄

O código não bloqueia no while e ainda não tenho o problema resolvido.

O rectangle e o parentSize não dão problemas, pois tenho outras janelas que usam essa técnica e funciona correctamente.

Eu permito passwords com espaços no início e no fim, só não permito passwords só com espaços! 👍

De quaquer forma, obrigado.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Bem esta caso e um pouco complexo.

Nao sei se estas bem a par de como funciona SWT mas basicamente Shell e o pai de todos os composites (o SWT segue a composite design pattern) e é ele que detem a interaccao com o utilizador. Ora acontece que tu iniciate uma nova shell ou seja perdeste a anterior e nao consegues fazer com que anterior ganhe de novo a interaccao com o utilizador. O que tu provavelmente queres é abrir um Dialog onde pedes um login e nao uma nova Shell.

Se precisares de exemplos eu tenho bastantes mas sao um pouco complexos.

Boa sorte.

O que eu quero é que o painel apareça numa janela modal.

Tenho outras janelas que constroem a sua própria shell e expandem o dialog, mas estou em crer que essas técnicas não estão correctas.

Estou a cometer algum erro de desenho ou a violar alguma norma de SWT?

BTW: SWT rula e mm muito mais simples para fazer os programas normais que fazemos, swing so tem a cena de poderes construir os teus proprios componentes.

SWT e JFace são 5 estrelas! 👍 O Swing é muito giro e tal, mas quando é para trabalhar: SWT rules!

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Estas a viollar uma das regras, nao devias instanciar uma nova shell e sim  passar a mesma como argumento se necessario. Os exemplos que eu tenho aqui sao demaidiado complexos e trabalham com titleareadialog mas amanha vou ver se encontro uma das primeiras aplicaccoes que fiz em SWT que tinha exactamente o que tu querias , ou seja aparecia uma pequena janela a pedir login e password.

Link to comment
Share on other sites

  • Solution

Atao vamos lah ver a minha aplicacao baseia-se numa versao umpouco antiga do SWT mas basicamente tens uma janela principal (que tem os menus e etc) e o que tu vais fazendo e trocando os composites interiores. Em algumas situacoes (como no caso da autenticacao) abre-se um novo dialog.

Vou-te mandar o codigo completao das duas que tem outras coisas mas ja vai dar para perceber mais ou menos como funciona:

/*
* Created on May 19, 2004
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package pt.Transpinheiro.GUI;

import java.io.File;

import org.apache.torque.Torque;
import org.apache.torque.TorqueException;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.program.Program;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;

import pt.Transpinheiro.GUI.Estatistica.EstatisticaComposite;
import pt.Transpinheiro.GUI.Gestao.GestaoComposite;
import pt.Transpinheiro.GUI.Oficina.OficinaComposite;
import pt.Transpinheiro.GUI.Stocks.StockComposite;
import pt.Transpinheiro.GUI.Utilitarios.ConfiguracaoDialog;
import pt.Transpinheiro.GUI.Viagens.ViagensComposite;
import pt.Transpinheiro.Gestores.Utilitarios.SemConfiguracaoException;
import pt.Transpinheiro.Gestores.Utilitarios.TranspinheiroConfiguracao;

import com.swtdesigner.ResourceManager;

/**
* Janela principal da aplicação.<br>
* Esta janela mostra um painel com tabs que permite navegar pelas areas de gestão
* da empresa e executar as accoes para as quais o utilizador tem permissões.
* 
* @author p0thead
*/
public class TranspinheiroWindow extends ApplicationWindow
{
private Action acercaAction;
private MenuManager contribMenu;
//-- Configuracao da aplicação
private TranspinheiroConfiguracao configuracao;
//-- Tabs das areas de gestão da empresa
private Action ajudaAction;
private Action configurarAction;
private Action sairAction;
private TabItem estatisticaTab;
private TabItem contabilidadeTab;
private TabItem gestaoTab;
private TabItem viagensTab;
private TabItem stocksTab;
private TabItem oficinaTab;
//-- Paineis para as diferentes areas de gestao
private GestaoComposite 		painelGestao;
//private ContabilidadeComposite	painelContabilidade;
private EstatisticaComposite	painelEstatistica;
private OficinaComposite		painelOficina;
private StockComposite			painelStock;
private ViagensComposite		painelViagens;
//---------------------------------------

/**
 * Constroi a janela principal da aplicação.
 */
public TranspinheiroWindow()
{
	super(null);
	createActions();
	addToolBar(SWT.NONE);
	addMenuBar();
}
/**
 * Constroi o conteudo da janela.<br>
 * Cria o painel com tabs com os paineis das areas de gestão da empresa.
 * @param parent O composito sobre o qual o painel será construido
 */
protected Control createContents(Composite parent)
{
	//-- Cria a tabFolder 
	TabFolder areaTabs = new TabFolder(parent, SWT.NONE);
	//-- E os paineis que a compoem
	oficinaTab = new TabItem(areaTabs, SWT.NONE);
	oficinaTab.setText("Oficina");
	this.painelOficina = new OficinaComposite(areaTabs);
	oficinaTab.setControl(painelOficina);
	oficinaTab.setImage(ResourceManager.getImage("imgs/TransPinheiro_Icon_Oficina_Tab_blank_32x32.gif"));

	stocksTab = new TabItem(areaTabs, SWT.NONE);
	stocksTab.setText("Stocks");
	this.painelStock = new StockComposite(areaTabs);
	stocksTab.setControl(painelStock);
	contribMenu.add(painelStock.getAccoes());
	stocksTab.setImage(ResourceManager.getImage("imgs/TransPinheiro_Icon_Stock_Tab_blank_32x32.gif"));

	viagensTab = new TabItem(areaTabs, SWT.NONE);
	viagensTab.setText("Viagens");
	this.painelViagens = new ViagensComposite(areaTabs);
	viagensTab.setControl(painelViagens);
	viagensTab.setImage(ResourceManager.getImage("imgs/TransPinheiro_Icon_Viagens_Tab_blank_32x32.gif"));

	gestaoTab = new TabItem(areaTabs, SWT.NONE);
	gestaoTab.setText("Gestão");
	this.painelGestao = new GestaoComposite(areaTabs);
	gestaoTab.setControl(painelGestao);
	contribMenu.add(painelGestao.getAccoes());
	gestaoTab.setImage(ResourceManager.getImage("imgs/TransPinheiro_Icon_Gestao_Tab_blank_32x32.gif"));


	contabilidadeTab = new TabItem(areaTabs, SWT.NONE);
	contabilidadeTab.setText("Contabilidade");
	//this.painelContabilidade = new ContabilidadeComposite(areaTabs);
	//contabilidadeTab.setControl(painelContabilidade);
	contabilidadeTab.setImage(ResourceManager.getImage("imgs/TransPinheiro_Icon_Contabilidade_Tab_blank_32x32.gif"));

	estatisticaTab = new TabItem(areaTabs, SWT.NONE);
	estatisticaTab.setText("Estatistica");
	this.painelEstatistica = new EstatisticaComposite(areaTabs);
	estatisticaTab.setControl(painelEstatistica);
	estatisticaTab.setImage(ResourceManager.getImage("imgs/TransPinheiro_Icon_Estatistica_Tab_blank_32x32.gif"));
	// DESIGNER: Add controls before this line.
	return areaTabs;
}
/**
 * Constroi as accoes desta janela, que serão mostradas no menu e na toolbar
 * desta janela.
 */
private void createActions()
{
	//-- Acção para sair da aplicação
	sairAction = new Action()
	{
		public void run()
		{
			close();
		}
	};
	sairAction.setImageDescriptor(ResourceManager.getImageDescriptor("imgs/TransPinheiro_Icon_MainWindow_Sair_32x32.gif"));
	//sairAction.setImageDescriptor(ResourceManager.getImageDescriptor(TranspinheiroWindow.class, "imgs/remover.gif"));
	sairAction.setToolTipText("Sair da aplicação");
	sairAction.setText("Sair");
	//-- Configurar a aplicação
	configurarAction = new Action()
	{
		public void run()
		{
			ConfiguracaoDialog dConfig = new ConfiguracaoDialog(getShell(), configuracao);
			dConfig.open();
		}
	};
	configurarAction.setImageDescriptor(ResourceManager.getImageDescriptor("imgs/TransPinheiro_Icon_MainWindow_Configuracao_32x32.gif"));//ResourceManager.getImageDescriptor(TranspinheiroWindow.class, "imgs/TransPinheiro_Icon_MainWindow_Configuracao_32x32.gif"));
	configurarAction.setToolTipText("Configurar a aplicação");
	configurarAction.setText("Configurar");
	//-- Ver ajuda (Abre o manual de utilizador)
	ajudaAction = new Action()
	{
		public void run()
		{
			String path = configuracao.getConfiguracaoGeral().getString(TranspinheiroConfiguracao.UM_PATH);
			if(path != null && new File(path).exists())
			{
				if(!Program.launch(path))
				{
					MessageDialog.openError(getShell(), "Não abriu o Manual de Utilizador",
						"Não foi possivel abrir o Manual de Utilizador.\n" +
						"Provavelmente não tem uma aplicação que o consiga abrir instalada.");
				}
			}
			else
				MessageDialog.openError(getShell(), "Não abriu o Manual de Utilizador",
					"O caminho para o manual de Utilizador não está definido\n" +
					"Defina-o na janela de configuração da aplicação.");

			/*SelectorDataDialog dData = new SelectorDataDialog(getShell());
			if(dData.open() == SelectorDataDialog.OK)
				MessageDialog.openInformation(getShell(), "Data seleccionada", "Data seleccionada : " +
					"" + dData.getDataSeleccionada().toLocaleString());*/
		}
	};
	ajudaAction.setImageDescriptor(ResourceManager.getImageDescriptor("imgs/TransPinheiro_Icon_MainWindow_Ajuda_32x32.gif"));
	ajudaAction.setToolTipText("Procurar ajuda");
	ajudaAction.setText("Ajuda");
	//-- Ecrã acerca da aplicação
	acercaAction = new Action()
	{
		public void run()
		{
			//AcercaDialog dAcerca = new AcercaDialog(getShell(), SWT.NONE);
		}
	};
	acercaAction.setImageDescriptor(ResourceManager.getImageDescriptor("imgs/TransPinheiro_Icon_Oficina_Manutencoes_blank_48x48.gif"));
	acercaAction.setToolTipText("Abre o ecrã com informação da aplicação");
	acercaAction.setText("Acerca");

}
/**
 * Cria o menuManager que gera e gere o menu principal desta janela.
 * @return o MenuManager que gera e gere o menu principal desta janela.
 */
protected MenuManager createMenuManager()
{
	MenuManager result = new MenuManager("menu");

	final MenuManager fileMenu = new MenuManager("Ficheiro");
	result.add(fileMenu);
	//-- Menu dinamico
	contribMenu = new MenuManager("Acções");
	result.add(contribMenu);
	//-- Menu Ficheiro
	fileMenu.add(configurarAction);
	fileMenu.add(new Separator());
	fileMenu.add(sairAction);
	//-- Menu Ajuda
	MenuManager ajudaMenu = new MenuManager("Ajuda");
	ajudaMenu.add(ajudaAction);
	ajudaMenu.add(acercaAction);
	result.add(ajudaMenu);
	// DESIGNER: Add controls before this line.
	return result;
}
/**
 * Cria o ToolBarManager que irá gerar e gerir a barra de tarefas desta janela.
 * @return ToolBarManager que irá gerar e gerir a barra de tarefas desta janela.
 */
protected ToolBarManager createToolBarManager(int arg0)
{
	ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT | SWT.WRAP);

	toolBarManager.add(sairAction);

	toolBarManager.add(configurarAction);

	toolBarManager.add(ajudaAction);
	// DESIGNER: Add controls before this line.
	return toolBarManager;
}
/**
 * Abre a janela e espera até que ela seja fechada pelo utilizador.
 * Antes de abrir a janela abre um dialogo de autenticação e caso não seja possivel
 * reconhecer o utilizador a janela da aplicação nunca chega a ser aberta.
 */
public void run()
{
	//-- Inicia Torque e carrega configuração
	try 
	{
		init();
	} 
	catch (TorqueException e) 
	{
		e.printStackTrace();
		MessageDialog.openError(getShell(), "Erro a iniciar o Torque", 
			"Falhou a iniciar o motor de acesso a dados!\n" +
			"Mensagem de erro : " + e.getLocalizedMessage());
	} 
	catch (SemConfiguracaoException e)
	{
		//-- Mostra info de excepcao em stdout
		e.printStackTrace();

		if(MessageDialog.openConfirm(getShell(), "Configuração inexistente.", 
			e.getLocalizedMessage() + "\nQuer configurar agora a aplicação?"))
		{
			//-- Cria uma nova configuracao inicialmente vazia
			configuracao = new TranspinheiroConfiguracao();
			//-- Abre o dialogo para configurara configuração inicial
			ConfiguracaoDialog dConfig = new ConfiguracaoDialog(getShell(), configuracao);
			dConfig.open();
			//-- Tenta de novo iniciar a aplicação
			run();	
			return;
		}
		//-- Se não há configuração e não tentamos configurar
		//-- então saimos porque não temos acesso a dados
		else return;
	}
	//-- Autentica o utilizador
//LoginDialog dLogin = new LoginDialog(getShell());
	//-- Se o dialogo permitiu fechar entao temos um 
	//-- utilizador reconhecido pelo sistema
//	if(dLogin.open() == LoginDialog.OK)
//	{	
		//-- A janela devia ser construida para o utilizador
		// this.utilizador = dLogin.getUtilizador(); 
		// open(utilizador);
		open();
		//-- Liberta os recursos do SO alocados
		ResourceManager.dispose();
		Display display = Display.getCurrent();
		Shell shell = getShell();
		while (!shell.isDisposed())
		{
			if (!display.readAndDispatch())
				display.sleep();
		}	
//	}
}
/**
 * Inicializa a aplicação.<br>
 * Neste metodo serão carregadas as configuracoes da aplicacao e será iniciado 
 * o motor do torque. Caso não haja ainda nenhuma configuracao será lancada uma
 * <code>SemConfiguracaoException</code>.
 */
private void init() throws TorqueException, SemConfiguracaoException 
{
	if(configuracao == null)
		//-- Tenta carregar a configuracao
		configuracao = TranspinheiroConfiguracao.load();

	//-- Inicia o motor de acesso a dados
	Torque.init(configuracao.getConfiguracaoTorque());
}
/**
 * Entrada da aplicação pelo Sistema Operativo.
 * @param args argumentos passados pelo sistema operativo na iniciação da aplicação
 */
public static void main(String args[])
{
	Display display = new Display();
	TranspinheiroWindow window = new TranspinheiroWindow();
	window.run();
}
protected void configureShell(Shell newShell)
{
	super.configureShell(newShell);
	newShell.setText("Transpinheiro");
	newShell.setImage(ResourceManager.getImage("imgs/TransPinheiro_Icon_Oficina_Manutencoes_blank_48x48.gif"));
}

}

e agora a classe de login:

/*
* Created on May 19, 2004
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package pt.Transpinheiro.GUI.Utilitarios;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

import pt.Transpinheiro.AcessoADados.Utilizadores;
import pt.Transpinheiro.Gestores.Pessoas.AutenticacaoException;
import pt.Transpinheiro.Gestores.Pessoas.GestorPessoas;

import com.swtdesigner.ResourceManager;
/**
* Dialogo de login da aplicação.<br>
* Quando é mostrado este dialogo só pode ser fechado de uma de duas maneiras:
* ou introduzindo dados válidos e clicando no butao OK fazendo a autenticação do utilizador no sistema,<br>
* ou clicando no cancel fazendo com que não se faça a autenticação e o utilizador não é reconhecido.
* 
* @author p0thead
*/
public class LoginDialog extends TitleAreaDialog
{
private Utilizadores 	utilizador;
private Text 			passwordTxt;
private Text 			usernameTxt;
/**
 * Cria um dialogo de login sobre a janela <code>parentShell</code>
 * @param parentShell a janela sobre a qual o dialogo será mostrado.
 */
public LoginDialog(Shell parentShell)
{
	super(parentShell);
}
/**
 * Cria a area principal do dialogo sobre <code>parent</code>
 */
protected Control createDialogArea(Composite parent)
{
	Composite area = (Composite) super.createDialogArea(parent);
	Composite contents = new Composite(area, SWT.NONE);
	final GridLayout gridLayout = new GridLayout();
	gridLayout.numColumns = 2;
	contents.setLayout(gridLayout);
	contents.setLayoutData(new GridData(GridData.FILL_BOTH));

	final Label usernameL = new Label(contents, SWT.NONE);
	usernameL.setText("Nome de utilizador :");

	usernameTxt = new Text(contents, SWT.BORDER);
	usernameTxt.setToolTipText("Preencha com o seu nome de utilizador do sistema");
	final GridData gridData = new GridData(GridData.GRAB_HORIZONTAL);
	gridData.widthHint = 100;
	usernameTxt.setLayoutData(gridData);

	final Label passwordL = new Label(contents, SWT.NONE);
	passwordL.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
	passwordL.setText("Password :");

	passwordTxt = new Text(contents, SWT.BORDER);
	passwordTxt.setEchoChar('*');
	passwordTxt.setToolTipText("Preencha com a sua password");
	final GridData gridData_1 = new GridData();
	gridData_1.widthHint = 100;
	passwordTxt.setLayoutData(gridData_1);
	setTitle("Login no sistema Transpinheiro");
	setMessage("Introduza os seus dados de autenticação.");
	setTitleImage(ResourceManager.getImage(LoginDialog.class, "/imgs/TransPinheiro_Icon_Login.gif"));
	return area;
}
/**
 * Verifica se os dados introduzidos são validos e caso sejam fecha o dialogo.
 * Caso contrário é mostrada a mensagem de erro e é permitido ao utilizador
 * corrigir esse erro.<br>
 * Este metodo é chamado quando o utilzador clica num dos botoes do dialogo.
 * @return true se poder fechar o dialogo e false caso contrario
 */
public boolean close()
{
	String msgErro = null;
	// Se o utilizador clicou OK os dados tem de ser validados
	// antes de se fechar o dialogo
	if(getReturnCode() == OK)
	{
		// Se os dados n sao validos mostra a mensagem de erro
		if( (msgErro = getErro()) != null)
		{
			setErrorMessage(msgErro);
			return false;
		}
	}

	return super.close();
}
/**
 * Tenta validar os dados do utilizador e caso não sejam validos devolve
 * uma mensagem de erro apropriada,
 * @return mensagem de erro ou null caso não haja
 */
private String getErro()
{
	String username = usernameTxt.getText();
	String password = passwordTxt.getText(); 
	// Campo de user n preenchido correctamente
	if( username == null || username.length() < 4)
		return "O campo de nome de utilizador tem ter pelo menos 4 caracteres!";
	else if(password == null || password.length() < 4)
		return "O campo da password tem ter pelo menos 4 caracteres!";

	// Se os dados estao validos entao tentamos autenticar no sistema
	try
	{
		this.utilizador = GestorPessoas.autenticaUtilizador(username, password);	
	}
	catch(AutenticacaoException aX)
	{
		return aX.getMessage();
	}
	// Se chegámos até aqui entao o utilzador está autenticado 
	// perante o sistema e não há erros a reportar	
	return null;
}
/**
 * Cria os butoes que aparecem no fim da janela de dialogo.
 * @parent o composito sobre o qual os butoes vão ser construidos
 */
protected void createButtonsForButtonBar(Composite parent)
{
	createButton(
		parent,
		IDialogConstants.OK_ID,
		IDialogConstants.OK_LABEL,
		true);
	createButton(
		parent,
		IDialogConstants.CANCEL_ID,
		IDialogConstants.CANCEL_LABEL,
		false);
}
/**
 * Depois do utilizador inserir os seus dados de autenticacao e clicar em ok o dialogo
 * autentica qual o utilizador em questão. Este metodo devolve o utilizador autenticado
 * @return o utilizador autenticado
 */
public Utilizadores getUtilizadorAutenticado()
{
	return this.utilizador;
}
protected void configureShell(Shell newShell)
{
	super.configureShell(newShell);
	newShell.setSize(285, 187);
}

}

como ves tens de passar a shell a um dialog para que o anterior nao perca a interaccao com o utilizador

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.