|
|
Re: Problem with Table & CellEditor & mouse click [message #446046 is a reply to message #445926] |
Tue, 16 November 2004 16:59 |
Veronika Irvine Messages: 1272 Registered: July 2009 |
Senior Member |
|
|
Add a focus listener to the Text widget - see below:
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new GridLayout());
// create a a table with 3 columns and fill with data
final Table table = new Table(shell, SWT.BORDER | SWT.MULTI
| SWT.FULL_SELECTION);
table.setLayoutData(new GridData(GridData.FILL_BOTH));
TableColumn column1 = new TableColumn(table, SWT.NONE);
TableColumn column2 = new TableColumn(table, SWT.NONE);
TableColumn column3 = new TableColumn(table, SWT.NONE);
for (int i = 0; i < 100; i++) {
TableItem item = new TableItem(table, SWT.NONE);
item.setText(new String[] { "cell "+i+" 0", "cell
"+i+" 1", "cell "+i+" 2"});
}
column1.pack();
column2.pack();
column3.pack();
// create a TableCursor to navigate around the table
final TableCursor cursor = new TableCursor(table,
SWT.NONE);
// create an editor to edit the cell when the user hits
"ENTER"
// while over a cell in the table
final ControlEditor editor = new ControlEditor(cursor);
editor.grabHorizontal = true;
editor.grabVertical = true;
cursor.addSelectionListener(new SelectionAdapter() {
// when the TableEditor is over a cell, select the
corresponding row in
// the table
public void widgetSelected(SelectionEvent e) {
table.setSelection(new TableItem[]
{cursor.getRow()});
}
// when the user hits "ENTER" in the TableCursor,
pop up a text editor so that
// they can change the text of the cell
public void widgetDefaultSelected(SelectionEvent
e){
final Text text = new Text(cursor,
SWT.NONE);
TableItem row = cursor.getRow();
int column = cursor.getColumn();
text.setText(row.getText(column));
text.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e)
{
// close the text editor
and copy the data over
// when the user hits
"ENTER"
if (e.character == SWT.CR)
{
TableItem row =
cursor.getRow();
int column =
cursor.getColumn();
row.setText(column,
text.getText());
text.dispose();
}
// close the text editor
when the user hits "ESC"
if (e.character == SWT.ESC)
{
text.dispose();
}
}
});
text.addFocusListener(new FocusAdapter() {
public void focusLost(FocusEvent e)
{
final String newText =
text.getText();
final TableItem row =
cursor.getRow();
final int column =
cursor.getColumn();
display.asyncExec(new
Runnable() {
public void run() {
MessageBox
message = new MessageBox(shell, SWT.ICON_QUESTION | SWT.YES | SWT.NO);
message.setMessage("Do
you want to apply the change '"+newText+"' to the table at ("+column+",
"+table.indexOf(row)+")?");
int result =
message.open();
if (result
== SWT.YES) {
row.setText(column,
newText);
}
}
});
editor.setEditor(null);
text.dispose();
}
});
editor.setEditor(text);
text.setFocus();
}
});
// Hide the TableCursor when the user hits the "MOD1" or
"MOD2" key.
// This alows the user to select multiple items in the
table.
cursor.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.keyCode == SWT.MOD1 ||
e.keyCode == SWT.MOD2 ||
(e.stateMask & SWT.MOD1) != 0 ||
(e.stateMask & SWT.MOD2) != 0) {
cursor.setVisible(false);
}
}
});
// Show the TableCursor when the user releases the "MOD2"
or "MOD1" key.
// This signals the end of the multiple selection task.
table.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) {
if (e.keyCode == SWT.MOD1 && (e.stateMask &
SWT.MOD2) != 0) return;
if (e.keyCode == SWT.MOD2 && (e.stateMask &
SWT.MOD1) != 0) return;
if (e.keyCode != SWT.MOD1 && (e.stateMask &
SWT.MOD1) != 0) return;
if (e.keyCode != SWT.MOD2 && (e.stateMask &
SWT.MOD2) != 0) return;
TableItem[] selection =
table.getSelection();
TableItem row = (selection.length == 0) ?
table.getItem(table.getTopIndex()) : selection[0];
table.showItem(row);
cursor.setSelection(row, 0);
cursor.setVisible(true);
cursor.setFocus();
}
});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
"Michael Seele" <mseele@guh-software.de> wrote in message
news:cn22fk$tdl$1@eclipse.org...
> hi,
> i use the tableCursor snipped for my application, but i have a problem:
>
> every time when a cell is in the editable mode, and the user clicks on
> another cell, the text of the previous selected cell will not be saved in
> the previous selected cell! and not the text of the new selected cell will
> be show in the editor, the text of the previous selected cell will be
> shown!
> how can i fix this???
>
> thx mseele
>
|
|
|
Powered by
FUDForum. Page generated in 0.02759 seconds