# JTable: Focus auf Zelle markiert ihren Text zum editieren



## dominik_ (21. Apr 2006)

Hallo,

ich versuche eine JTable zu programmieren, bei der man wenn man per TAB auf eine neue Zelle springt, diese gleich in den Editiermodus bringt und ihren Text markiert, so dass man sofort darauf losschreiben kann und der alte Inhalt der Zelle direkt überschrieben wird.

Dies sollte am besten nur bei Textzellen funktionieren. Ich habe auch Zellen die eine ComboBox sind oder ein Button, bei diesen möchte ich dieses InstantEdit verhalten nicht.

Vielen Dank, dominik


----------



## André Uhres (21. Apr 2006)

```
//package tableDemo;
/*
 * TableTextEdit2.java
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableTextEdit2 extends JFrame {
    public TableTextEdit2() {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(400,300);
        setLocationRelativeTo(null);
        tabelle = new JTable();
        tabelle.setModel(new DefaultTableModel(
            new Object [][] {
                {new Boolean(true), "Test"},
                {null, null},
                {new Boolean(true), ""},
                {null, "Hallo"}
            },
            new String [] {
                "Title 1", "Title 2"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Boolean.class, 
                java.lang.String.class  //Spalte vom Typ String wird automatisch editiert
            };
            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        });
        tabelle.addKeyListener(new KeyAdapter(){
            public void keyReleased(KeyEvent e){
                enterKeyReleased(e);
            }
        });
        getContentPane().add(new JScrollPane(tabelle), BorderLayout.CENTER);
        tabelle.changeSelection(0,1,false,false);
        //Muss sichtbar sein um editieren zu können:
        setVisible(true);
        edit(0, 1);
    }
    private void enterKeyReleased(KeyEvent e){
        edit(tabelle.getSelectedRow(), tabelle.getSelectedColumn());
    }
    private void edit(int row, int column){
        //Nur Spalten vom Typ String editieren:
        if(tabelle.getColumnClass(column) == String.class){
            tabelle.editCellAt(row, column);
            if(tabelle.getCellEditor()!=null){
                JTextField text = (JTextField)tabelle.getEditorComponent();
                text.requestFocusInWindow();
                text.selectAll();
            }
        }
    }
    public static void main(String args[]) {new TableTextEdit2();}
    private JTable tabelle;
}
```


----------



## dominik_ (24. Apr 2006)

Vielen Dank!

Das Beispiel ist genau das was ich gesucht habe!!! 

Ciao, dominik


----------

