Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Java & Event Handling

Empfohlene Antworten

Veröffentlicht

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

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

Siehste geht ja doch!!!! :-)))

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

Bis dann, Ciao!

TG

@TG:

Hab ja auch nie gesagt, daß es nicht geht, aber es ist superumständlich. Und alles nur, um im Look&Feel zu bleiben. I HATE IT!

fadi

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

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

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

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.