JTable "EditMode" ausschalten und Fokus neu setzen?!

Ravebaby

Erfahrenes Mitglied
Hallo,
ich habe zwei Probleme mit meiner JTable zu denen ich schon wild die API gewälzt habe und alles mögliche getestet habe, jedoch anscheinend nicht die richtigen Funktionen finde.

Als erstes möchte ich den Cell-Edit Mode zu einem bestimmten Zeitpunkt ausschalten. Bisher umgehe ich diese fehlende Funktion mit folgendem Workaraound, bei dem ich den Fokus einfach auf die nächste Zelle setze. Aber ich hoffe doch, dass es noch eine bessere Lösung gibt!?

Code:
if (rangedTypesTable.isEditing()){ //if currently editing
				rangedTypesTable.editCellAt(rangedTypesTableModelAdapter.getRowCount(), RangedTypesTableModelAdapter.TYPE_COL); //first col must not be in edit mode for next if

Zudem möchte ich nach dem klicken eines Buttons den Fokus auf eine bestimmte Zelle in meiner Tabelle setzen, damit der Benutzer dann gleich dieses Feld editieren kann. Ich kann zwar den Fokus auf diese Zelle setzen und sie erhält einen schwarzen Rahmen indem ich "rangedTypesTable.editCellAt(..)" aufrufe, aber der Fokus sitzt immer noch auf dem zuvor gedrückten Button.
Deshalb habe ich versucht mittels der Methoden requestFocus()... den Fokus von meinem Button auf den Frame zu setzen indem sich die Tabelle und somit das zu editierende Feld befinden. Das funktioniert jedoch leider auch nicht. Wie löst man so etwas auf eine andere Art?!

Vielen Dank für jede Hilfe!!
Grüße Rave
 
Moin!
Zu der ersten Frage, einfach die isCellEditable() Methode des TableModels den gewünschten Wahrheitswert zurückliefern lassen:

Code:
import javax.swing.DefaultCellEditor;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

/**
 * 
 */

/**
 * @author JW
 *
 */
public class Test extends JFrame{
    
    public Test(){
        String[][] text = {{"1","1"},{"2","2"}};
        String[] header ={"h1","h2"};
        JTable table = new JTable(text,header);
        DefaultTableModel model = new DefaultTableModel(text,header){
            public boolean isCellEditable(int i, int j){
                return getAnswer();
            }
        };
        table.setModel(model);
        
        this.getContentPane().add(table);
        this.setSize(200, 200);
        this.setVisible(true);
    }
    public boolean getAnswer(){
        return false;
       //return true;
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        new Test();

    }

}

Edit:
Und zur zweiten Frage, wenn ich folgenden Code ausführe, sobald der Button gedrückt wird, kann ich sofort mit dem Editieren der Zelle anfangen;
Code:
public void actionPerformed(ActionEvent arg0) {
		table.requestFocus();
		table.editCellAt(1, 0);
		
}

*grüssle*
MeinerEiner
 
Zuletzt bearbeitet von einem Moderator:
Zurück