Zum Inhalt springen

Java & Event Handling


Empfohlene Beiträge

Geschrieben

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.]

Geschrieben

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

Geschrieben

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.]

Geschrieben

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica">Zitat:</font><HR>Original erstellt von fadi:

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


m_btnNew.addActionListener(new ActionListener()

{

  actionPerformed(ActionEvent e)

  {

    ...

  }

});

B]

Geschrieben

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

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...