Hallo.
Folgendes Problem:
Ich hab eine Tabelle, zu der ich mir einen eigenen Editor zusammengebastelt habe.
Nun möchte ich erreichen, daß wenn der Editor aktiv wird, der bestehende Inhalt markiert wird und der Benutzer so einfach drauf los schreiben kann und nicht erst den alten Wert löschen muß.
Leider funktioniert das nicht so richtig.
Hier erstmal mein Code:
Die eigentliche Tabelle:
Das ColumnModel:
Und der Editor:
Die Roteinfärbung von der Zelle wird gemacht, ich bekomme auch zurückgemeldet, daß der Text markiert ist, aber beim Ändern bleibt der alte Text trozdem einfach stehen.
Wo liegt mein Fehler, was mach ich falsch?
Und was muß ich ändern, damit es richtig funktioniert?
Gruß,
MSJones
Folgendes Problem:
Ich hab eine Tabelle, zu der ich mir einen eigenen Editor zusammengebastelt habe.
Nun möchte ich erreichen, daß wenn der Editor aktiv wird, der bestehende Inhalt markiert wird und der Benutzer so einfach drauf los schreiben kann und nicht erst den alten Wert löschen muß.
Leider funktioniert das nicht so richtig.
Hier erstmal mein Code:
Die eigentliche Tabelle:
Java:
package TableEditor;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class Table extends JFrame
{
// Konstanten:
private static final long serialVersionUID = 1941793965489302399L;
// Attribute:
public static void main (String[] args)
{
Table table = new Table();
table.start();
}
public void start()
{
DefaultTableModel model1 = new DefaultTableModel(new String[]{"header1", "header2", "header3", "header4"}, 4);
MyColumnModel columnModel1 = new MyColumnModel();
JTable tbl = new JTable(model1, columnModel1);
tbl.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
tbl.createDefaultColumnsFromModel();
tbl.setValueAt("123", 1, 1);
tbl.setValueAt("123", 2, 2);
tbl.setValueAt("123", 3, 3);
tbl.setPreferredSize(new Dimension(200,200));
add(tbl);
pack();
setVisible(true);
}
}
Das ColumnModel:
Java:
package TableEditor;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.TableColumn;
public class MyColumnModel extends DefaultTableColumnModel
{
// Konstanten:
private static final long serialVersionUID = -7727423991064482954L;
// Attribute:
@Override
public void addColumn(TableColumn aColumn)
{
super.addColumn(aColumn);
aColumn.setCellEditor(new MoneyCellEditor());
}
}
Und der Editor:
Java:
package TableEditor;
import java.awt.Color;
import java.awt.Component;
import javax.swing.AbstractCellEditor;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.TableCellEditor;
public class MoneyCellEditor extends AbstractCellEditor implements TableCellEditor
{
// Konstanten:
private static final long serialVersionUID = -7264931193618526446L;
// Attribute:
private JTextField text = new JTextField();
@Override
public Object getCellEditorValue()
{
if (text.getText().trim().equals(""))
{
text.setText("0");
}
text.setText(Double.valueOf(text.getText().replace(",", ".")) + " €");
return text.getText();
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
{
if (value == null)
{
text.setText("");
return text;
}
String strValue = value.toString();
text.setText(strValue.replace(".", "").replace(" ", "").replace("€", "").replace(",", "."));
System.out.println("Selected");
text.selectAll();
System.out.println(text.getSelectedText());
text.setBackground(Color.RED);
return text;
}
}
Die Roteinfärbung von der Zelle wird gemacht, ich bekomme auch zurückgemeldet, daß der Text markiert ist, aber beim Ändern bleibt der alte Text trozdem einfach stehen.
Wo liegt mein Fehler, was mach ich falsch?
Und was muß ich ändern, damit es richtig funktioniert?
Gruß,
MSJones