Eu tava procurando coisas sobre SWT na internet.. Tem muita coisa legal, e muita coisa espalhada, além do grande guia do site do eclipse.
Daí eu tava pensando, vou criar um grande livrão verde, ensinando aos usuários de Swing como portar as aplicações pra SWT sem maiores dificuldades, relacionando cada item do Swing ao seu correspondente em SWT.
Deve ficar pronto até o dia 15.
Té mais o/
terça-feira, 27 de novembro de 2007
O grande livrão verde do SWT
Postado por
Preco
às
09:33
1 comentários
RT @perereco: O grande livrão verde do SWT
segunda-feira, 19 de novembro de 2007
Exibindo (e dimensionando) uma imagem no SWT
Existe um monte de jeito de fazer isso, esse aqui é o mais fofinho... Ele exibe a imagem dentro de um Canvas, e toda vez que ele precisa repintar a imagem, ele dimensiona de acordo com o tamanho do "container" (composite) pai.
Eis o código:
final Composite composite = new Composite(shell, SWT.NONE);
final Image image = SWTResourceManager.getImage(PrincipalSWT.class, "/com/trabalho/imgs/imagem.jpg");
final int width = image.getBounds().width;
final int height = image.getBounds().height;
Canvas canvas = new Canvas(composite, SWT.NONE);
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
e.gc.drawImage( image, 0, 0, width, height, 0, 0,
(int) composite.getSize().x, (int)composite.getSize().y );
}
});
Peguei o código e adaptei daqui
Por hoje, é isso...
Té mais o/
Postado por
Preco
às
16:35
3
comentários
RT @perereco: Exibindo (e dimensionando) uma imagem no SWT
terça-feira, 13 de novembro de 2007
Retirando a seleção em uma tabela no SWT
Hoje, quando eu tava mexendo com uma Table no SWT, percebi que quando a pessoa clica em um item, esse item fica selecionado até que o usuário clique em outro item. Isso pode ser útil pra alguém, mas acho mais legal que o item continue selecionado até que o usuário clique em outro componente, ou quando o usuário clicar em uma linha vazia da tabela.
Pra resolver isso, tem essa gambiarrinha aqui ó:
Table table = new Table(shell, SWT.FULL_SELECTION
| SWT.BORDER);
table.addMouseListener(new MouseAdapter() {
public void mouseDown(final MouseEvent arg0) {
if (table.getItem(new Point(arg0.x, arg0.y)) == null) {
//Se o usuário clica em uma linha vazia
table.deselectAll();
}
}
});
table.addFocusListener(new FocusAdapter() {
public void focusLost(final FocusEvent arg0) {
//Se o usuário clica em outro componente
table.deselectAll();
}
});
Era isso, Té mais o/
Postado por
Preco
às
11:11
0
comentários
RT @perereco: Retirando a seleção em uma tabela no SWT
segunda-feira, 12 de novembro de 2007
Multithreading com SWT
Antes de mais nada, um pequeno comentário de um usuário de Swing, em relação ao SWT:
Ô coisa complicada do demo!
Tá. Desespero de lado, vamos ao que interessa: Acessando elementos gráficos do SWT através de uma outra thread.
Vamos dizer que eu tenho um programa, que tem que monitorar o banco de dados, de 5 em 5 segundos, e colocar o valor de um campo em um Text (o equivalente SWT ao JTextField).
Primeiro, criamos o Text:
Text campoText = new Text(composite, SWT.BORDER);
Beleza. Agora, se a gente tenta acessar ele através de uma outra Thread, o maldito "Invalid Thread access" aparece, indicando que a gente tem que mudar de estratégia.
O que deve ser feito? Criar uma Thread mais ou menos assim:
final Thread t = new Thread(){
public void run(){
while(true){
Display display = shell.getDisplay();
if(display == null || display.isDisposed()) return;
display.asyncExec(new Runnable() { //Início do Runnable
public void run() {
String str = pegaCampoDaTabelaTal();
campoText.setText(str);
}
}); //Fim do Runnable
try { // Tenta dormir (FORA do Runnable)
sleep(5000); // 5 segundos
} catch (InterruptedException e) {}
} // Fim do while
} //Fim do método run
}; // Fim da Thread
t.start(); // Inicia a Thread \o/
Com o trecho de código acima, é possível acessar campoText através da Thread t, sem dor, só alegria!
Um pequeno parênteses: Existe uma diferença bem grande entre os métodos asyncExec() e syncExec().
O primeiro é executado pela segunda Thread sem que a primeira Thread (a principal) seja notificada. Já o segundo vai suspender a thread principal até que o segundo Runnable (linha 6) seja finalizada. Como no nosso caso, é mais interessante que o programa continue lépido e fagueiro.
Té mais o/
Postado por
Preco
às
16:44
1 comentários
RT @perereco: Multithreading com SWT
segunda-feira, 22 de outubro de 2007
Verificar atributos únicos no Text do SWT
Eu fiz um meigo código pra verificação de atributos únicos no SWT. Funciona mais ou menos assim: O usuário digita o texto, e ele verifica se o texto coincide com o texto do mesmo campo de uma lista de objetos do mesmo tipo (vinda do banco de dados, no caso).
Vamos supor que o campo seja Placa de automóvel.
placaText = new Text(composite, SWT.CENTER | SWT.BORDER);
placaText.addVerifyListener(new VerifyListener() {
public void verifyText(final VerifyEvent e) {
e.text = e.text.toUpperCase();
if (e.keyCode == 127) e.doit = false; // Não permite a tecla Delete
else {
StringBuffer buffer = new StringBuffer(placaText.getText());
buffer.insert(e.start, (e.keyCode != 8) ? e.character : '$');
boolean existe = false;
// Só testa quando o tamanho estiver correto,
// evitar loops desnecessários
if (buffer.toString().length() == 8) {
for (Automovel a : listaautomoveis) {
if (buffer.toString().equalsIgnoreCase(a.getPlaca())) {
existe = true;
break;
}
}
}
// isso é um label. Pode ser colocado embaixo do campo "placa" ;)
erroPlacaL.setText(existe ? "Placa já cadastrada" : "");
}
}
});
placaText.setTextLimit(8);
E eu continuo minha busca incessante por um primo do JFormattedTextField pra SWT :(
Té mais o/
Postado por
Preco
às
11:05
0
comentários
RT @perereco: Verificar atributos únicos no Text do SWT
sexta-feira, 19 de outubro de 2007
JOptionPane no SWT
Recentemente, decidi dar uma chance pro SWT, pra ver qual é que era.
Descobri que o SWT é bom \o/
Agora vamos a alguns componentes legais do SWT, e seus correlatos em Swing.
O primeiro da série é o MessageBox, equivalente direto do JOptionPane.
O código pra inserir uma MessageBox na sua aplicação é:
MessageBox messagebox = new MessageBox(shell, SWT.OK | SWT.ICON_ERROR);
messagebox.setText("Título da Janela");
messagebox.setMessage("Mensagem");
messagebox.open();
Considerações:
shell: Nome do componente que chama a aplicação.
SWT.OK | SWT.ICON_ERROR: Style bit que indica à aplicação quais elementos devem aparecer na janela. Pra uma MessageBox, os style bits mais usados são:
Botões:
- SWT.ABORT: Botão "Abortar" (Falhar)
- SWT.RETRY: Botão "Repetir"
- SWT.IGNORE: Botão "Ignorar"
- SWT.OK: Botão "OK"
- SWT.CANCEL: Botão "Cancelar"
- SWT.YES: Botão "Sim"
- SWT.NO: Botão "Não"
Ícones:
- SWT.ICON_ERROR: Erro
- SWT.ICON_INFORMATION: Informação
- SWT.ICON_WARNING: Aviso
- SWT.ICON_QUESTION: Pergunta
- SWT.ICON_WORKING: Trabalho (geralmente, igual ao de informação)
Agora é só usar a massa cinzenta pra fazer isso ser útil.
Té o/
Postado por
Preco
às
09:30
0
comentários
RT @perereco: JOptionPane no SWT
