Einzelnen Beitrag anzeigen

Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#1

[java] Editiervorgang in jTable kontrollieren

  Alt 19. Mär 2007, 15:57
Hallo,
Ich muss darf euch wieder nmit eine jjava-Frage quaelen

Nachdem ich meine terminverwaltung einigermassen ferig bejommen habe, gibt es noch folgendes Problem:

Ich benutze eine jTable, um gewisse Eintraege bearbeitbar zu machen. Nun duerfen diese nicht ueber 300 Zeichen lang sein. Ausserdem moechte ich Datei und Tabelle synchron halten, also wird sofort nachm editiervorgang in die Datei geschrieben, und dann die Datei neu eingelesen.
Jetzt ist die Frage, was machen, wenn der (dummme) User mehr eingibt, als er darf? Ich moechte das gerne abfangen, ihn auf seine Dummheit hinweisen und dann seinen Cursor wieder in die Zelle setzen.

Folgenden Code habe ich probiert:
Code:
NotesModel().addTableModelListener(new TableModelListener()
        {
            public void tableChanged(TableModelEvent evt)
            {
                if (evt.getType() == evt.UPDATE)
                {
                    UpdateNotesFile(evt.getFirstRow());
                }
            }
        });

protected void UpdateNotesFile(int index)
    {
        if (((String) NotesModel().getValueAt(index, 1)).length() > 300)
        {
            NotesTable.editCellAt(NotesTable.getSelectedRow(), NotesTable.getSelectedColumn());
            //NotesTable.getSelectionModel().setSelectionInterval(index, index);
            JOptionPane.showMessageDialog(null, 'Sorry, you cannot exeed 300 characters.\nYou wrote: ' + ((String) NotesModel().getValueAt(index, 1)).length(), 'Error during update', JOptionPane.ERROR_MESSAGE);
        }
        else
        {
            // Datei - update
        }
    }
(" durch ' ersetzt)

NotesTable ist die Tabelle (jTable) und NotesModel() liefert das model zurueck(nach DefaultTableModel gecasted)

Das Problem ist, dass das editCellAt(); wohl wieder ein Updata ausloest, woraufhin der User ununterbrochen die Meldung sieht, dass er zuviel eingegeben hat.

Wenn ich das editCellAt nur einmal aufrufe (mittels globaem Boolean Flag), dann wird die Zelle nur fokussiert, ich moechte sie aber beriet zum editieren haben.

Ideen?

P.S. java ist vorgeschrieben, und da Programm steht auch schon, also nix gegen Java bitte
  Mit Zitat antworten Zitat