Problem with Table & CellEditor & mouse click [message #445926] |
Fri, 12 November 2004 05:15  |
Eclipse User |
|
|
|
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
|
|
|
|
Re: Problem with Table & CellEditor & mouse click [message #446046 is a reply to message #445926] |
Tue, 16 November 2004 11:59  |
Eclipse User |
|
|
|
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.04120 seconds