• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

M6

Shell e Painel de SWT

11 mensagens neste tópico

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.  :thumbsup:

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

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 :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

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 :D

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! :thumbsup:

De quaquer forma, obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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! :thumbsup: O Swing é muito giro e tal, mas quando é para trabalhar: SWT rules!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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! :thumbsup: O Swing é muito giro e tal, mas quando é para trabalhar: SWT rules!

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dabubble, obrigado pela explicação e pela ajuda. ;)

Fico a aguardar essa aplicação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado. :P

Dei uma olhadela e parece-me extremamente útil. Quando puder vejo isto com mais atenção. :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

BTW como viste a funcionaldade de login esta comentada, mas isso era so para desenvolvimento porque esta a funcionar. outra coisa na altura ainda nao sabia design patterns por isso onde estao GestorXXX leia-se XXXDAO.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

BTW como viste a funcionaldade de login esta comentada, mas isso era so para desenvolvimento porque esta a funcionar. outra coisa na altura ainda nao sabia design patterns por isso onde estao GestorXXX leia-se XXXDAO.

Ok. :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora