Hi!
Ich hätte wieder mal eine Frage bezüglich JTable und CellEditor.
Ich hab mit einen CellEditor geschrieben - das ganze heißt ArticleSelectionEditor und besteht aus einem Textfeld und einem Button:
Mein CellEditor soll nun, wenn man diesen aktiviert (öffnet - wie sagt man da?), den Text im TextFeld markieren.
Das Funktioniert an und für sich schon recht gut, nur funktionierts nicht, wenn man mit dem Fokus auf der Zelle ist und man einen Buchstaben oder eine Zahl eingibt.
Ich habe das Problem schon einmal gehabt, einen Thread aufgemacht und habs dann auch lösen können, nur steh ich jetzt wieder an, wenn es um ein Panel als Editor geht.
Danke für eure Hilfe
greez
THEJS
Ich hätte wieder mal eine Frage bezüglich JTable und CellEditor.
Ich hab mit einen CellEditor geschrieben - das ganze heißt ArticleSelectionEditor und besteht aus einem Textfeld und einem Button:
Java:
public class ArticleSelectionEditor extends AbstractCellEditor implements TableCellEditor {
private static final long serialVersionUID = 1L;
String originalValue;
JButton btnMore = new JButton();
JTextField txtField = new JTextField();
JComponent component = new JPanel();
public ArticleSelectionEditor() {
btnMore.setText("...");
btnMore.setPreferredSize(new Dimension(20, 8));
btnMore.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
ArticleSelectionDialog dlg = new ArticleSelectionDialog("Wählen Sie einen Artikel aus der Liste");
int result = dlg.showDialog();
if(result > 0)
{
txtField.setText(dlg.getArtikelnr());
}
}
});
txtField.requestFocus();
component.setLayout(new BorderLayout());
component.add(txtField, BorderLayout.CENTER);
component.add(btnMore, BorderLayout.EAST);
component.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent arg0) {
txtField.setText(originalValue);
txtField.requestFocusInWindow();
txtField.selectAll();
}
});
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
originalValue = value.toString();
txtField.setText(originalValue);
component.requestFocus();
return component;
}
@Override
public Object getCellEditorValue() {
try
{
if(DBConnection.executeQuery("SELECT productid FROM product WHERE productnr = '" + txtField.getText() + "'").next())
{
return txtField.getText();
} else
{
JOptionPane.showMessageDialog(null, "Eingegebene Artikelnummer existiert nicht in der Datenbank!", "Falsche Eingabe", JOptionPane.ERROR_MESSAGE);
}
} catch (Exception e) {
e.printStackTrace();
}
return originalValue;
}
Mein CellEditor soll nun, wenn man diesen aktiviert (öffnet - wie sagt man da?), den Text im TextFeld markieren.
Das Funktioniert an und für sich schon recht gut, nur funktionierts nicht, wenn man mit dem Fokus auf der Zelle ist und man einen Buchstaben oder eine Zahl eingibt.
Ich habe das Problem schon einmal gehabt, einen Thread aufgemacht und habs dann auch lösen können, nur steh ich jetzt wieder an, wenn es um ein Panel als Editor geht.
Danke für eure Hilfe
greez
THEJS