Swing Automatischer Editorstart in JTable-Zelle

markus2510

Mitglied
Hallo,

ich habe eine JTable in der man per Kontextmenü (Menüeinträge Hinzufügen/Entfernen) Zeilen hinzufügen/löschen kann. Funktioniert soweit alles bestens.

Nun möchte ich beim Hinzufügen einer Zeile erreichen daß die erste Spalte in der Zeile auch gleich zur Eingabe bereit ist, der Benutzer also nicht erst umständlich zur neuen Zeile scrollen und einen Doppelklick auf die Zelle machen muß bevor er was eingeben kann.

Das Scrollen zur neuen Zeile geht schon, auch das automatische Markieren der neue Zeile mit setRowSelectionInterval (rowCount-1, rowCount-1) funktioniert. Mit setColumnSelectionInterval (rowCount-1,0) hab ich versucht die Zelle zu markieren und dann mit table.editCellAt(rowCount-1,0) den Editor zu starten, aber es funktioniert nicht.

Kann mir jemand helfen?

lg, Markus
 
Moin,
Java:
jt.editCellAt(1, 1, null);
jt.getSelectionModel().setSelectionInterval(1, 1);

damit klappt es bei mir. Seit Java 1.2 wurde daran (siehe 3 Parameter editCellAt) etwas geändert.

Grüße
 
Mal schnell zusammengeschustert:

Java:
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

public class Test {

    public void run() {
        String[] cols = {"Text"};
        String[][] data = {{"A"},{"B"},{"C"}};
        final DefaultTableModel mdl = new DefaultTableModel(data, cols);
        final JTable tbl = new JTable(mdl);
        tbl.setRowSelectionAllowed(true);
        tbl.setColumnSelectionAllowed(true);

        JButton b = new JButton("NEW");
        b.addActionListener(e -> {
            mdl.addRow(new String[]{""});
            tbl.scrollRectToVisible(
                tbl.getCellRect(mdl.getRowCount() - 1, 0, true));
            tbl.requestFocus();
            tbl.editCellAt(mdl.getRowCount()-1, 0);

        });
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(new JScrollPane(tbl));
        frame.add(b, BorderLayout.SOUTH);
        frame.setVisible(true);
        frame.setSize(800, 600);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().run());
    }
}
 
mihe7 Das editieren funktioniert, aber die Zeile mit der zu editierenden Zelle soll doch auch markiert sein; so wie wenn man per Hand eine Zelle anklickt.
 
Hallo!

Danke, funktioniert nun grundsätzlich 🙂 Was noch fehlt ist der blinkende Cursor in der Zelle damit der Benutzer weiß wo der Text nun geschrieben wird. Wenn man was eingibt erscheint der Text zwar in der Zelle, aber der fehlende Cursor irritiert ein wenig. Außerdem wird nach drücken von Enter auf einmal zur ersten Zeile raufgescrollt was zusätzlich störend wirkt.

lg, Markus
 

Neue Themen


Zurück
Oben