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

M6

Ajuda na detecção de coluna numa tabela SWT.

4 mensagens neste tópico

Estou com um problema que não consigo resolver... Pelo que investiguei, parece que não tem solução, mas mesmo assim estou a dar o benficio da dúvida...

Estou a fazer o desenvolvimento de uma aplicação desktop, acente em SWT, e quero ter uma tabela com duas colunas: chave e valor. O número de chaves é variável, ou seja, não existe um conjunto fixo de chaves e como tal tenho dois botões para efectuar essa gestão: adicionar e remover.

Para editar, nada melhor que o clique de rato ou o clássico F2 sobre o texto que se pretende alterar. E aqui é que as coisas se complicam.

Detectar a linha onde o utilizador se encontra é simples, já descobrir a coluna e colocá-la editável parece impossível...

Eis o método que tenho para fazer a edição:

/**

* Edit the selected cell value

* @param e is the selection event

*/

private void editCellValue(SelectionEvent e) {

// Clean up any previous editor control

Control oldEditor = pEditor.getEditor();

if (oldEditor != null) oldEditor.dispose();

// Identify the selected row

TableItem item = (TableItem)e.item;

if (item == null) return;

int column = 1;

// The control that will be the editor must be a child of the Table

Text newEditor = new Text(tProperties, SWT.NONE);

newEditor.setText(item.getText(column));

newEditor.addModifyListener(new ModifyListener() {

public void modifyText(ModifyEvent e) {

Text text = (Text)pEditor.getEditor();

pEditor.getItem().setText(1, text.getText());

}

});

newEditor.selectAll();

newEditor.setFocus();

pEditor.setEditor(newEditor, item, column);

}

Estão a ver a linha int column = 1;? Isso define qual a coluna que vai ser editada e tem de ser um valor constante, caso contrário pEditor.getItem().setText e pEditor.setEditor não funcionam...

Ora tenho assim dois problemas:

1. Descobrir qual a coluna em que o utilizador está posicionado.

2. Saber como é possível usar a informação do ponto acima em métodos que me permitam colocar a célula editável.

Se alguém tiver mais informações e me possa ajudar, agradeço.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.graphics.*;

public class Snippet3 {

public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
final Table table = new Table(shell, SWT.BORDER | SWT.V_SCROLL
		| SWT.FULL_SELECTION);
table.setHeaderVisible(true);
table.setLinesVisible(true);
final int rowCount = 64, columnCount = 4;
for (int i = 0; i < columnCount; i++) {
	TableColumn column = new TableColumn(table, SWT.NONE);
	column.setText("Column " + i);
}
for (int i = 0; i < rowCount; i++) {
	TableItem item = new TableItem(table, SWT.NONE);
	for (int j = 0; j < columnCount; j++) {
		item.setText(j, "Item " + i + "-" + j);
	}
}
for (int i = 0; i < columnCount; i++) {
	table.getColumn(i).pack();
}
Point size = table.computeSize(SWT.DEFAULT, 200);
table.setSize(size);
shell.pack();
table.addListener(SWT.MouseDown, new Listener() {
	public void handleEvent(Event event) {
		Point pt = new Point(event.x, event.y);
		TableItem item = table.getItem(pt);
		if (item == null)
			return;
		for (int i = 0; i < columnCount; i++) {
			Rectangle rect = item.getBounds(i);
			if (rect.contains(pt)) {
				int index = table.indexOf(item);
				System.out.println("Item " + index + "-" + i);
			}
		}
	}
});
shell.open();
while (!shell.isDisposed()) {
	if (!display.readAndDispatch())
		display.sleep();
}
display.dispose();
}

}

in: http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet3.java?rev=HEAD&content-type=text/vnd.viewcvs-markup

Como podes ver pelo exemplo tens de la ir pelos pontos nao da pelas celulas.

Hope it helped

EDIT: Btw o tipo de evento gerado tb e importante tu precisas de apanhar o evento SWT.MouseDown e nao SWT.Selection,  so digo isto porque ja me aconteceu...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vou dar uma olhadela nisso quando puder...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dabubble, obrigado pela ajuda, mas não era isso que pretendia.

Isso só me permite usar o rato e o uso do teclado é imprescindível...

Vou assumir que não dá e partir para outra solução menos bonita.

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