Zum Inhalt springen

Java & Event Handling


fadi

Empfohlene Beiträge

Moin,

ich habe ein merkwürdiges Phänomen:

In einer einspaltigen Tabelle kann per Button einen neuen Eintrag erstellen. Diesem Eintrag kann man dann direkt in der Liste einen Namen geben.

Das ganze läuft ungefähr so:

Dem Button habe ich einen ActionListener hinzugefügt


myBtn.addActionListener(new ActionListener()

{

  actionPerformed(ActionEvent e)

  {

    TableCellEditor newEditor = myTbl.getCellEditor(...)

    newEditor.addCellEditorListener(new CellEditorListener()

    {

      editingCanceled(ChangeEvent e){...}

      editingStopped(ChangeEvent e){...}

    });

  }

});

In dem editingStopped trage ich den neuen Eintrag in meinen Datenvector ein und aktualisiere das Datenmodell hinter der Tabelle (zwei verschieden Vectoren). Wenn ich während einer Prgorammsitzung einen neuen Eintrag hinzufüge, wird er beim ersten Mal 1x, beim zweiten Mal 2x usw. hinzugefügt.

Er läuft auch entsprechend oft in die editingStopped hinein.

Kann mir jemand erklären weshalb?

fadi

[Dieser Beitrag wurde von fadi am 28. August 2000 editiert.]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Problem gelöst wink.gif

Das folgende tut, was es tun soll.


m_btnNew.addActionListener(new ActionListener()

  {

    public void actionPerformed(ActionEvent e)

    {

      materialListItem mliDummy = new materialListItem();

      mliDummy.setName(szDummyEntry);


      int nPos = EngineManager.recorder.m_pnListe.addItem(mliDummy, -1);

      EngineManager.recorder.m_pnListe.updateTableModel();

      EngineManager.recorder.m_pnListe.m_tblMaterial.setRowSelectionInterval (nPos , nPos);


      EngineManager.recorder.m_pnListe.myModel.setRowToEdit(nPos);

      boolean b = EngineManager.recorder.m_pnListe.m_tblMaterial.editCellAt(nPos, 0);


      Component comp = (Component)EngineManager.recorder.m_pnListe.m_tblMaterial.getEditorComponent();

      ((JTextField)comp).selectAll();

      ((JTextField)comp).setCaretPosition(szDummyEntry.length());

      comp.requestFocus();


      EngineManager.recorder.m_pnListe.m_tblMaterial.getCellEditor().addCellEditorListener(new CellEditorListener()

      {

        public void editingCanceled(ChangeEvent e)

        {

          //dev

          String szDebug = "editingCanceled";

          String szDebugTitle = "Debug";

          JOptionPane.showMessageDialog(null, szDebug, szDebugTitle, JOptionPane.INFORMATION_MESSAGE);

          //dev ende

        }



        public void editingStopped(ChangeEvent e)

        {

          int nRow = EngineManager.recorder.m_pnListe.m_tblMaterial.getEditingRow();


          if (EngineManager.recorder.m_pnListe.myModel.isCellEditable(nRow, 0))

          {

            EngineManager.recorder.m_pnListe.myModel.setRowToEdit(-1);


            TableCellEditor tblEditor = EngineManager.recorder.m_pnListe.m_tblMaterial.getCellEditor();

            String szConfigKey = EngineManager.recorder.curConfig.getValidKey();


            materialListItem mli = (materialListItem)EngineManager.recorder.m_pnListe.getItem(nRow);

            String szValue = (String)tblEditor.getCellEditorValue();


            mli.setName(szValue);

            mli.setConfigKey(szConfigKey);


            EngineManager.recorder.m_pnListe.addItem(mli, nRow);

            EngineManager.recorder.m_pnListe.updateTableModel();

          }

        }//editingStopped

      });//CellEditorListener

    }//actionPerformed

  });//ActionListener

Link zu diesem Kommentar
Auf anderen Seiten teilen

confused.gif

Meinst Du die erste öffnende runde Klammer zwischen addActionListener und new?


m_btnNew.addActionListener(new ActionListener()

{

  actionPerformed(ActionEvent e)

  {

    ...

  }

});

Die wird ganz am Ende hinter der geschweiften Klammer geschlossen. Hab ich auch nur so aus den Sun-Tutorials übernommen.

Gefressen hat's javac und läuft und läuft und läuft wink.gif. Jetzt kommt die kontextsensitive Hilfe eek.gif

fadi

[Dieser Beitrag wurde von fadi am 29. August 2000 editiert.]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin Uli,

das ist ein ganz dreckiger Trick biggrin.gif

Es handelt sich um eine sogenannte anonyme Klasse. Dieser Codeauszug, denn ich gepostet habe, kommt aus dem Konstruktors meiner Klasse.

Ich habe auch mehrere Class-Dateien, die aus der einen Java-Datei erzeugt werden.

Mehr Infos dazu gibt es unter http://www.java.sun.com/docs/books/tutorial/java/javaOO/nested.html

fadi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin,

stimmt, Du hast recht. Wie Du merkst, habe ich mit diesem Konzept und den dazugehörigen Begrifflichkeiten auch noch leichte Probleme. confused.gif

Die URL unten verweist auf eine Seite weiter im Sun-Tutorial, dort im unteren Teil gibt es einen Absatz über anonyme Klassen.

http://www.java.sun.com/docs/books/tutorial/java/javaOO/innerclasses.html

fadi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi nochmal,

jau, den Abschnitt ueber anonyme Klassen hab ich spaeter noch entdeckt. Da steht dann auch, dass man die moeglichst sparsam verwenden sollte. smile.gif

Wie auch immer, ich werde nachher nochmal in meinen Unterlagen blaettern. Laesst mich irgendwie nicht ganz kalt, das Problemchen. Muss man wohl ganz haarklein aufschluesseln, damit es klar wird.

ciao

Uli

------------------

Uli's Prüfungspage ... die Seite mit den Prüfungshinweisen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...