Aktualisieren der Tableansicht nach Änderung durch Popup

Herr_M

Erfahrenes Mitglied
Hallo Zusammen,

Ich arbeite Gerade an einer Software bei der ich mit zwei Tabellen
eine "MasterDetail" Beziehung von Daten darstelle. (Siehe angehängter Screenshot).
Links sind einzelne Kriteriengruppen gelistet, und rechts werden jeweils die zur
aktuell markierten Gruppe gehörigen Kriterien angezeigt.
Das aktualisieren der rechten Tabelle beim anklicken einer Gruppe auf der linken Seite funktioniert. Nur wenn ich ein Kriterium hinzufüge, bearbeite oder lösche wird die Anzeige nicht aktualisiert (das Tablemodel schon).

Hinzufügen, und Bearbeiten funktioniert über das rechts im Screenshots sichtbare Popup.
Löschen erfolgt direkt nach dem Klicken auf den Button Löschen und einem "JA/NEIN" Popup.

Hier der Quellcode:
Die Darstellungslogik "FrameKriterien" ist hierbei von der Businesslogik "FrameKriterienController" getrennt.
Ich hoffe mal das ganze ist noch einigermaßen überschaubar.

FrameKriterien
Java:
package com.de.otto.fmdb.client.gui.verwaltung;

import java.awt.*;
...
import dori.jasper.engine.util.JRLoader;


public class FrameKriterien extends BaseFrame {

  private JPanel jPnlContent = new JPanel();
  private JPanel jPnlKriterienGruppen = new JPanel();
  private JPanel jPnlKriterien = new JPanel();
  private JPanel jPNlCtrlKriterien = new JPanel();
  private JPanel jPnlCtrlGruppen = new JPanel();
  private BorderLayout borderLayout1 = new BorderLayout();
  private BorderLayout borderLayout2 = new BorderLayout();
  private BorderLayout borderLayout3 = new BorderLayout();
  private JButton jBtnEinfuegenGruppen = new JButton();
  private JButton jBtnLoeschenGruppen = new JButton();
  private JButton jBtnEinfuegenKriterium = new JButton();
  private JButton jBtnLoeschenKriterium = new JButton();
  private JButton jBtnBearbeitenKriterium = new JButton();
  private JButton jBtnBearbeitenGruppe = new JButton();
  private Util util = Util.getInstance();
  private JMenuBar jMenu = new JMenuBar();
  private JMenu jMenuDrucken = new JMenu();
  private JMenuItem jMenuItemDrucken = new JMenuItem();

  private JScrollPane tableScrollPaneKriterien = new JScrollPane();
  private JScrollPane tableScrollPaneKriterienGruppen = new JScrollPane();

  private JTable jTableKriterien;
  private JTable jTableKriterienGruppen;

  private FrameKriterienController controller = new FrameKriterienController();

  /**
   * erstellt Fenster Kriterien
   */
  public FrameKriterien() {
    super();
    try {
      jbInit();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  /**
   * Initialisiert die grafische Oberfläche und Datenbankkomponenten
   * 
   * @throws Exception
   */
  private void jbInit() throws Exception {

    configJPanelContent();
    configJPnlKriterien();
    configJPnlKriterenGruppen();
    configJTblKriterenGruppen();
    configJTblKriterien();
    configTableScrollPaneKriterien();
    configTableScrollPankeKriterienGruppen();
    configJPnlCtrlKriterien();
    configJPnlCtrlGruppen();
    configJBtnEinfuegenGruppen();
    configJBtnLoeschenGruppen();
    configJBtnEinfuegenKriterium();
    configJBtnLoeschenKriterium();
    configJBtnBearbeitenKriterium();
    configJBtnBearbeitenGruppe();
    configJMenuDrucken();

    this.setJMenuBar(jMenu);
    this.setTitle("Kriterienübersicht");
    this.getContentPane().add(jPnlContent, BorderLayout.CENTER);
    this.setSize(new Dimension(820, 398));
    this.addWindowListener(new java.awt.event.WindowAdapter() {
      public void windowActivated(WindowEvent e) {
        this_windowActivated(e);
      }
    });

    jPnlContent.add(jPnlKriterienGruppen, BorderLayout.WEST);
    jPnlKriterienGruppen.add(tableScrollPaneKriterienGruppen,
        BorderLayout.CENTER);
    tableScrollPaneKriterienGruppen.getViewport().add(jTableKriterienGruppen,
        null);
    jPnlContent.add(jPnlKriterien, BorderLayout.CENTER);
    jPnlKriterien.add(tableScrollPaneKriterien, BorderLayout.CENTER);
    jPnlKriterien.add(jPNlCtrlKriterien, BorderLayout.SOUTH);
    tableScrollPaneKriterien.getViewport().add(jTableKriterien, null);
    jPnlKriterienGruppen.add(jPnlCtrlGruppen, BorderLayout.SOUTH);
    jPnlCtrlGruppen.add(jBtnLoeschenGruppen, null);
    jPnlCtrlGruppen.add(jBtnEinfuegenGruppen, null);
    jPnlCtrlGruppen.add(jBtnBearbeitenGruppe, null);
    jPNlCtrlKriterien.add(jBtnBearbeitenKriterium, null);
    jPNlCtrlKriterien.add(jBtnEinfuegenKriterium, null);
    jPNlCtrlKriterien.add(jBtnLoeschenKriterium, null);
    jMenu.add(jMenuDrucken);
    jMenuDrucken.add(jMenuItemDrucken);

    controller.getData();
  }

  /**
   * neue Gruppe erstellen
   * 
   * @param e
   *          aktuelles Event
   */
  // TODO addRow, Selection
  void jBtnEinfuegenGruppe_actionPerformed(ActionEvent e) {
    try {
      DlgGruppeAend dlgGr = new DlgGruppeAend(this, Constants.GRUPPE_EINFUEGEN,
          true, new KriterienGruppenValueObject(), controller);
      util.setLocation(dlgGr, this);
      dlgGr.setVisible(true);
    } catch (Exception exc) {
      exc.printStackTrace();
      JOptionPane.showMessageDialog(this, "Fehler beim Einfügen der Gruppe: "
          + exc.getMessage(), "Fehlermeldung", JOptionPane.ERROR_MESSAGE);      
    }
  }

  /**
   * erstellt neues Kriterium in aktuell ausgewählter Gruppe
   * 
   * @param e
   *          aktuelles Event
   */
  // TODO addRow, Selection
  void jBtnEinfuegenKriterium_actionPerformed(ActionEvent e) {
    try {
      int selectedRow = jTableKriterienGruppen.getSelectedRow();
      if (selectedRow < 0) {
        return;
      }
      KriterienValueObject kriteriumVO = new KriterienValueObject();
      kriteriumVO.setKriteriumGruppenNummer(((KriterienGruppenValueObject) controller.getKriterienGruppenFromTable(selectedRow)).getKriteriumGruppenNummer());
      DlgKritAend dlgKr = new DlgKritAend(this, Constants.KRITERIUM_EINFUEGEN, true, kriteriumVO, controller);
      util.setLocation(dlgKr, this);
      dlgKr.setVisible(true);
      
//      DlgKritAend dlgKr = new DlgKritAend(this, Constants.KRITERIUM_BEARBETEN, true, controller.getKriterienFromTable(selectedRow), controller);
//      util.setLocation(dlgKr, this);
//      dlgKr.setVisible(true);
      
      
    } catch (Exception exc) {
      exc.printStackTrace();
      JOptionPane.showMessageDialog(this,
          "Fehler beim Einfügen eines Kriteriums: " + exc.getMessage(),
          "Fehlermeldung", JOptionPane.ERROR_MESSAGE);
    }
  }

  // /**
  // * Sucht nach einen Index, ob dieser in den Kriterien bereits vorhanden ist.
  // *
  // * @param Idx
  // * zu suchender Index
  // * @return Angabe, ob dieser Index bereits besteht
  // * @deprecated
  // */
  // private boolean foundIdx(int Idx) {
  // boolean found = false;
  // /* Wird jetzt von der Persistenc Layer und Sequences erledigt */
  // return found;
  // }

  /**
   * Löscht ausgwwähltes Kriterium und zugehörige Einträge/Verbindungen in/zu
   * Formularen
   * 
   * @param e
   *          aktuelles Event
   */
  void jBtnKriteriumLoeschen_actionPerformed(ActionEvent e) {
    int selectedRow = jTableKriterien.getSelectedRow();
    if (selectedRow < 0) {
      return;
    }
    if (JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(this,
        "Möchten Sie das Kriterium wirklich löschen?", "",
        JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE)) {
      try {
        controller.deleteKriterium(selectedRow);
        refresh();
      } catch (Exception exc) {
        exc.printStackTrace();
        JOptionPane.showMessageDialog(this,
            "Fehler beim Löschen eines Kriteriums: " + exc.getMessage(),
            "Fehlermeldung", JOptionPane.ERROR_MESSAGE);
      }
    }
  }

  /**
   * Löscht aktuelle Kriteriengruppe und alle zugehörigen Kriterien
   * 
   * @param e
   *          aktuelles Event
   */
  void jBtnLoeschenGruppe_actionPerformed(ActionEvent e) {
    int selectedRow = jTableKriterienGruppen.getSelectedRow();
    if (selectedRow < 0) {
      return;
    }
    if (JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(this,
        "Möchten Sie die Gruppe wirklich löschen?", "",
        JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE)) {
      try {
        controller.deleteKriterienGruppeMitKriterien(selectedRow);
        refresh();
      } catch (Exception exc) {
        exc.printStackTrace();
        JOptionPane.showMessageDialog(this, "Fehler beim Löschen der Gruppe: "
            + exc.getMessage(), "Fehlermeldung", JOptionPane.ERROR_MESSAGE);
      }
    }
  }

  //ursprunglich nicht genutzt!
  // /**
  // * Übernimmt Änderungen an den Kriteriengruppen
  // *
  // * @param e
  // * aktuelles Event
  // */
  // void jBtnSaveGr_actionPerformed(ActionEvent e) {
  // accessRemote.saveChangesToKriterienGruppen(listeKriterienGruppen);
  // }

  // /**
  // * Übernimmt Änderungen an den Kriterien
  // *
  // * @param e
  // * aktuelles Event
  // */
  // void jBtnSaveKr_actionPerformed(ActionEvent e) {
  // accessRemote.saveChangesToKriterien(listeAlleKriterien);
  // }

  /**
   * öffnet Dialog zum Editieren einer bestehenden Gruppe.
   * 
   * @param e
   *          aktuelles Event
   */
  void jBtnBearbeitenGruppe_actionPerformed(ActionEvent e) {
    try {
      int selectedRow = jTableKriterienGruppen.getSelectedRow();
      if (selectedRow < 0) {
        return;
      }
      DlgGruppeAend dlgGr = new DlgGruppeAend(this,
          Constants.GRUPPE_BEARBEITEN, true, controller
              .getKriterienGruppenFromTable(selectedRow), controller);
      util.setLocation(dlgGr, this);
      dlgGr.setVisible(true);
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  /**
   * aktualisiert Tabelle, wenn das Fenster aktiviert wird.
   * 
   * @param e
   *          aktuelles Event
   */
  void this_windowActivated(WindowEvent e) {
    refresh();
  }

  /**
   * öffnet einen Dialog zur Änderung des aktuellen Kriteriums.
   * 
   * @param e
   *          aktuelles Event
   */
  void jBtnBearbeitenKriterium_actionPerformed(ActionEvent e) {
    try {
      int selectedRow = jTableKriterien.getSelectedRow();
      if (selectedRow < 0) {
        return;
      }
      DlgKritAend dlgKr = new DlgKritAend(this, Constants.KRITERIUM_BEARBETEN, true, controller.getKriterienFromTable(selectedRow), controller);
      util.setLocation(dlgKr, this);
      dlgKr.setVisible(true);
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  /**
   * Druckt die Kriterien per JasperReports im Hochformat.
   * 
   * @param e
   *          aktuelles Event
   */
  void jMenuItemDrucken_actionPerformed(ActionEvent e) {
    try {
      String reportTitle = "Kriterienliste";
      JasperReport mainreport = (JasperReport) JRLoader
          .loadObject(FrameMain.class
              .getResource("../jreports/FM_KritList.jasper"));

      JasperPrint jp = JasperFillManager.fillReport(mainreport, null,
          JasperUtils.getJasperDBConnection());

      dori.jasper.view.JRViewer jrv = new dori.jasper.view.JRViewer(jp);
      javax.swing.JDialog viewer = new javax.swing.JDialog();
      viewer.setTitle("Druckvorschau " + reportTitle);
      viewer.getContentPane().add(jrv);
      viewer.setModal(true);
      viewer.setLocation(10, 10);
      viewer.setSize(650, 950); // hochformat
      viewer.show();
    } catch (java.lang.Exception ex) {
      ex.printStackTrace();
      JOptionPane.showMessageDialog(this,
          "Es ist ein Fehler beim Drucken aufgetreten.", "Druckfehler: "
              + ex.getMessage(), JOptionPane.ERROR_MESSAGE);
    }
  }

  /**
   * 
   * ToDo: Methodenbeschreibung für configJPanelContent.
   * 
   * @returntype: void
   * @author haeublm
   * @since 6.0
   */
  private void configJPanelContent() {
    jPnlContent.setLayout(borderLayout1);
  }

  /**
   * 
   * Initialisiert configJPnlKriterien.
   * 
   * @returntype: void
   * @author haeublm
   * @since 6.0
   */
  private void configJPnlKriterien() {
    jPnlKriterien.setPreferredSize(new Dimension(240, 240));
    jPnlKriterien.setLayout(borderLayout2);
  }

  /**
   * 
   * Initialisiert configJPnlKriterenGruppen.
   * 
   * @returntype: void
   * @author haeublm
   * @since 6.0
   */
  private void configJPnlKriterenGruppen() {
    jPnlKriterienGruppen.setPreferredSize(new Dimension(400, 400));
    jPnlKriterienGruppen.setLayout(borderLayout3);
  }

  /**
   * 
   * Initialisiert configJTblKriterien.
   * 
   * @returntype: void
   * @author haeublm
   * @since 6.0
   */
  private void configJTblKriterien() {
    jTableKriterien = controller.getNewTable("jTableKriterien", JTable.class,
        new String[] { " ", "Kriterium", "mit Text" });
    jTableKriterien.getColumnModel().getColumn(
        FrameKriterienController.TABLE_COLUMN_CRITERION_LAUFNR).setMinWidth(20);
    jTableKriterien.getColumnModel().getColumn(
        FrameKriterienController.TABLE_COLUMN_CRITERION_LAUFNR).setMaxWidth(20);
    jTableKriterien.getColumnModel().getColumn(
        FrameKriterienController.TABLE_COLUMN_CRITERION_NAME).setMinWidth(250);
    jTableKriterien.getColumnModel().getColumn(
        FrameKriterienController.TABLE_COLUMN_CRITERION_NAME).setMaxWidth(250);
    jTableKriterien.getColumnModel().getColumn(
        FrameKriterienController.TABLE_COLUMN_CRITERION_WITH_TEXT).setMinWidth(
        100);
    jTableKriterien.getColumnModel().getColumn(
        FrameKriterienController.TABLE_COLUMN_CRITERION_WITH_TEXT).setMaxWidth(
        100);
    jTableKriterien.getTableHeader().setReorderingAllowed(false);
    jTableKriterien.setFont(new java.awt.Font("Dialog", 0, 11));
    jTableKriterien.setIntercellSpacing(new Dimension(4, 4));
    jTableKriterien.setRowHeight(21);
    jTableKriterien.setGridColor(Color.black);
    jTableKriterien.addMouseListener(new MouseListener() {
      /**
       * Wird zum reagieren auf das anklicken einer Gruppe benötigt.
       */
      public void mouseClicked(MouseEvent e) {
        System.out.println("JTblKriterien - mouseClicked");
      }

      // Die übrigen Methoden werden hier nicht genutzt
      // müssen aber implementiert werden.
      public void mousePressed(MouseEvent e) {
      }

      public void mouseReleased(MouseEvent e) {
      }

      public void mouseEntered(MouseEvent e) {
      }

      public void mouseExited(MouseEvent e) {
      }
    });
  }

  /**
   * 
   * Initialisiert configJTblKriterienGruppen.
   * 
   * @returntype: void
   * @author haeublm
   * @since 6.0
   */
  private void configJTblKriterenGruppen() {
    jTableKriterienGruppen = controller.getNewTable("jTableKriterienGruppen",
        JTable.class, new String[] { " ", "Gruppe" });
    jTableKriterienGruppen.getColumnModel().getColumn(
        FrameKriterienController.TABLE_COLUMN_GROUP_LAUFNR).setMinWidth(
        20);
    jTableKriterienGruppen.getColumnModel().getColumn(
        FrameKriterienController.TABLE_COLUMN_GROUP_LAUFNR).setMaxWidth(
        20);

    jTableKriterienGruppen.getColumnModel().getColumn(
        FrameKriterienController.TABLE_COLUMN_GROUP_BEZEICHNUNG).setMinWidth(
        350);
    jTableKriterienGruppen.getColumnModel().getColumn(
        FrameKriterienController.TABLE_COLUMN_GROUP_BEZEICHNUNG).setMaxWidth(
        350);
    jTableKriterienGruppen.getTableHeader().setReorderingAllowed(false);
    jTableKriterienGruppen.setRowHeight(21);
    jTableKriterienGruppen.setFont(new java.awt.Font("Dialog", 0, 11));
    jTableKriterienGruppen.getTableHeader().setReorderingAllowed(false);
    jTableKriterienGruppen.setGridColor(Color.black);
    jTableKriterienGruppen.setIntercellSpacing(new Dimension(4, 4));
    jTableKriterienGruppen.addMouseListener(new MouseListener() {

      public void mouseClicked(MouseEvent e) {
        System.out.println("JTblKriterienGruppe mouseClicked");
        aendernKriterienliste();
      }

      // Die übrigen Methoden werden hier nicht genutzt
      // müssen aber implementiert werden.
      public void mousePressed(MouseEvent e) {
      }

      public void mouseReleased(MouseEvent e) {
      }

      public void mouseEntered(MouseEvent e) {
      }

      public void mouseExited(MouseEvent e) {
      }
    });
  }

  /**
   * 
   * Initialisiert configTableScrollPaneKriterien.
   * 
   * @returntype: void
   * @author haeublm
   * @since 6.0
   */
  private void configTableScrollPaneKriterien() {
    tableScrollPaneKriterien
        .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    tableScrollPaneKriterien.setBorder(BorderFactory.createEtchedBorder());
    // TODO ROWHEADER
    // tableScrollPaneKriterien.setRequestFocusEnabled(false);
    //   
    // tableScrollPaneKriterien.setRowHeaderView()
  }

  /**
   * 
   * Initialisiert configTableScrollPankeKriterienGruppen.
   * 
   * @returntype: void
   * @author haeublm
   * @since 6.0
   */
  private void configTableScrollPankeKriterienGruppen() {
    tableScrollPaneKriterienGruppen
        .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    tableScrollPaneKriterienGruppen.setBorder(BorderFactory
        .createEtchedBorder());
  }

  /**
   * 
   * Initialisiert configJPnlCtrlKriterien.
   * 
   * @returntype: void
   * @author haeublm
   * @since 6.0
   */
  private void configJPnlCtrlKriterien() {
    jPNlCtrlKriterien.setBorder(BorderFactory.createLoweredBevelBorder());
    jPNlCtrlKriterien.setPreferredSize(new Dimension(40, 40));
    jPNlCtrlKriterien.setLayout(null);
  }

  /**
   * 
   * Initialisiert configJPnlCtrlGruppen.
   * 
   * @returntype: void
   * @author haeublm
   * @since 6.0
   */
  private void configJPnlCtrlGruppen() {
    jPnlCtrlGruppen.setBorder(BorderFactory.createLoweredBevelBorder());
    jPnlCtrlGruppen.setPreferredSize(new Dimension(40, 40));
    jPnlCtrlGruppen.setLayout(null);
  }

  /**
   * 
   * Initialisiert configJBtnEinfuegenGruppen.
   * 
   * @returntype: void
   * @author haeublm
   * @since 6.0
   */
  private void configJBtnEinfuegenGruppen() {
    jBtnEinfuegenGruppen.setBounds(new Rectangle(151, 7, 95, 27));
    jBtnEinfuegenGruppen.setPreferredSize(new Dimension(95, 23));
    jBtnEinfuegenGruppen.setText("Einfügen");
    jBtnEinfuegenGruppen.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        jBtnEinfuegenGruppe_actionPerformed(e);
      }
    });
  }

  /**
   * 
   * Initialisiert configJBtnLoeschenGruppen.
   * 
   * @returntype: void
   * @author haeublm
   * @since 6.0
   */
  private void configJBtnLoeschenGruppen() {
    jBtnLoeschenGruppen.setBounds(new Rectangle(27, 7, 96, 27));
    jBtnLoeschenGruppen.setText("Löschen");
    jBtnLoeschenGruppen.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        jBtnLoeschenGruppe_actionPerformed(e);
      }
    });
  }

  /**
   * 
   * Initialisiert configJBtnEinfuegenKriterium.
   * 
   * @returntype: void
   * @author haeublm
   * @since 6.0
   */
  private void configJBtnEinfuegenKriterium() {
    jBtnEinfuegenKriterium.setBounds(new Rectangle(158, 7, 95, 27));
    jBtnEinfuegenKriterium.setText("Einfügen");
    jBtnEinfuegenKriterium
        .addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(ActionEvent e) {
            jBtnEinfuegenKriterium_actionPerformed(e);
          }
        });
  }

  /**
   * 
   * Initialisiert configJBtnKriteriumLoeschen.
   * 
   * @returntype: void
   * @author haeublm
   * @since 6.0
   */
  private void configJBtnLoeschenKriterium() {
    jBtnLoeschenKriterium.setBounds(new Rectangle(28, 7, 95, 27));
    jBtnLoeschenKriterium.setText("Löschen");
    jBtnLoeschenKriterium
        .addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(ActionEvent e) {
            jBtnKriteriumLoeschen_actionPerformed(e);
          }
        });
  }

  /**
   * 
   * Initialisiert configJBtnBearbeitenKriterium.
   * 
   * @returntype: void
   * @author haeublm
   * @since 6.0
   */
  private void configJBtnBearbeitenKriterium() {
    jBtnBearbeitenKriterium.setText("Bearbeiten");
    jBtnBearbeitenKriterium.setBounds(new Rectangle(283, 7, 95, 27));
    jBtnBearbeitenKriterium
        .addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(ActionEvent e) {
            jBtnBearbeitenKriterium_actionPerformed(e);
          }
        });
  }

  /**
   * 
   * Initialisiert configJBtnBearbeitenGruppe.
   * 
   * @returntype: void
   * @author haeublm
   * @since 6.0
   */
  private void configJBtnBearbeitenGruppe() {
    jBtnBearbeitenGruppe.setText("Bearbeiten");
    jBtnBearbeitenGruppe.setBounds(new Rectangle(270, 7, 95, 27));
    jBtnBearbeitenGruppe.setToolTipText("");
    jBtnBearbeitenGruppe.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        jBtnBearbeitenGruppe_actionPerformed(e);
      }
    });
  }

  /**
   * 
   * Initialisiert configJMenuDrucken.
   * 
   * @returntype: void
   * @author haeublm
   * @since 6.0
   */
  private void configJMenuDrucken() {
    jMenuDrucken.setText("Drucken");
    jMenuItemDrucken.setText("Übersicht drucken...");
    jMenuItemDrucken.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        jMenuItemDrucken_actionPerformed(e);
      }
    });
  }

  /**
   * 
   * Ändert die Einträge der jTable für die Kriterien, wenn eine andere Gruppe
   * angeklickt wird.
   * 
   * @returntype: void
   * @author haeublm
   * @throws Exception
   * @since 6.0
   */
  private void aendernKriterienliste() {
    try {
      int selectedRow = jTableKriterienGruppen.getSelectedRow();
      if (selectedRow >= 0) {
        controller.aendernKriterienliste(selectedRow);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  /**
   * 
   * ToDo: Methodenbeschreibung für aendernGruppenliste.
   * 
   * @returntype: void
   * @author haeublm
   * @since 6.0
   */
  private void aendernGruppenliste() {
    try {
      controller.aendernGruppenliste();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  /**
   * 
   * Refresh durchführen.
   * 
   * @returntype: void
   * @author haeublm
   * @since 6.0
   */
  private void refresh() {
    try {
      aendernGruppenliste();
      aendernKriterienliste();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

FrameKriterienController
Java:
package com.de.otto.fmdb.client.gui.verwaltung;

import java.util.List;
...
import javax.swing.table.DefaultTableModel;


public class FrameKriterienController extends BaseController {

  public static final int TABLE_COLUMN_GROUP_LAUFNR = 0;
  public static final int TABLE_COLUMN_GROUP_BEZEICHNUNG = 1;
  public static final int TABLE_COLUMN_CRITERION_LAUFNR = 0;
  public static final int TABLE_COLUMN_CRITERION_NAME = 1;
  public static final int TABLE_COLUMN_CRITERION_WITH_TEXT = 2;

  private BaseTableModel modelTableKriterienGruppen;
  private BaseTableModel modelTableKriterien;

  public void getData() throws Exception {
    initModels();
    loadKriterienGruppen();
  }

  @Override
  public void initModels() throws Exception {
    if (!isLoadedModels()) {
      modelTableKriterienGruppen = (BaseTableModel) getModel("jTableKriterienGruppen");
      modelTableKriterien = (BaseTableModel) getModel("jTableKriterien");
      setLoadedModels(true);
    }

  }

  public List<KriterienGruppenValueObject> getAllKriterienGruppen() throws Exception {
    return accessRemote.getAllKriterienGruppen();
  }

  public List<KriterienValueObject> getKriterien(int gruppenNummer)
      throws Exception {
    return accessRemote.getKriterien(gruppenNummer);
  }

  private void loadKriterienGruppen() throws Exception {
    fillKriterienGruppenTableModel(getAllKriterienGruppen());
  }

  private void fillKriterienGruppenTableModel(
      List<KriterienGruppenValueObject> voList) {
    modelTableKriterienGruppen.clear();
    for (int i = 0; i < voList.size(); i++) {
      Object[] row = getTableRow(voList.get(i), i + 1);
      ((DefaultTableModel) modelTableKriterienGruppen).addRow(row);
    }
    ((DefaultTableModel) modelTableKriterienGruppen).fireTableDataChanged();
  }


  private Object[] getTableRow(KriterienGruppenValueObject vo, int laufNr) {
    Object[] row = new Object[modelTableKriterienGruppen.getColumnCount()];
    row[TABLE_COLUMN_GROUP_LAUFNR] = laufNr;
    row[TABLE_COLUMN_GROUP_BEZEICHNUNG] = vo;
    return row;
  }

  private void fillKriterienTableModel(List<KriterienValueObject> voList) {
    modelTableKriterien.clear();
    for (int i = 0; i < voList.size(); i++) {
      Object[] row = getTableRow(voList.get(i), i + 1);
      ((DefaultTableModel) modelTableKriterien).addRow(row);
    }
    ((DefaultTableModel) modelTableKriterien).fireTableDataChanged();
  }


  private Object[] getTableRow(KriterienValueObject vo, int laufNr) {
    Object[] row = new Object[modelTableKriterien.getColumnCount()];
    row[TABLE_COLUMN_CRITERION_LAUFNR] = laufNr;
    row[TABLE_COLUMN_CRITERION_NAME] = vo;
    row[TABLE_COLUMN_CRITERION_WITH_TEXT] = new Boolean((vo.getKriteriumTyp() == 1 ? true
        : false));

    return row;
  }

  public void aendernKriterienliste(int selectedRow) throws Exception {
    int kriteriumGruppenNummer = ((KriterienGruppenValueObject) modelTableKriterienGruppen
        .getValueAt(selectedRow, TABLE_COLUMN_GROUP_BEZEICHNUNG))
        .getKriteriumGruppenNummer();
    fillKriterienTableModel(getKriterien(kriteriumGruppenNummer));

  }

  public void aendernGruppenliste() throws Exception {
    // dTableKriterienGruppen = new DataTable((List) listeKriterienGruppen);
    // jTblKriterienGruppen.setModel(dTableKriterienGruppen);
    fillKriterienGruppenTableModel(getAllKriterienGruppen());
  }

  public void deleteKriterium(int selectedRow) throws Exception {
    KriterienValueObject kriterium = getKriterienFromTable(selectedRow);
    accessRemote.deleteKriterium(kriterium);    
  }

  /**
   * Löscht eine KriterienGruppe und alle zugeordneten Kriterien.
   * @param selectedRow
   * @throws Exception
   */
  public void deleteKriterienGruppeMitKriterien(int selectedRow) throws Exception {
    KriterienGruppenValueObject vo = getKriterienGruppenFromTable(selectedRow);
    accessRemote.deleteKriterienGruppeMitKriterien(vo.getKriteriumGruppenNummer());    
  }

  public KriterienGruppenValueObject getKriterienGruppenFromTable(int selectedRow) {
    return (KriterienGruppenValueObject) modelTableKriterienGruppen.getValueAt(selectedRow,TABLE_COLUMN_GROUP_BEZEICHNUNG);
  }

  public KriterienValueObject getKriterienFromTable(int selectedRow) {
    return (KriterienValueObject) modelTableKriterien.getValueAt(selectedRow,TABLE_COLUMN_CRITERION_NAME);
  }

  public void updateGruppenbezeichnung(
      KriterienGruppenValueObject kriterienGruppe) throws Exception {
    accessRemote.updateGruppenbezeichnung(kriterienGruppe);
    
  }

  public void insertGruppenbezeichnung(
      KriterienGruppenValueObject kriterienGruppe) throws Exception {
    accessRemote.insertGruppenbezeichnung(kriterienGruppe);
  }

  public void updateKriterium(KriterienValueObject kriteriumVo) throws Exception {
    accessRemote.updateKriterium(kriteriumVo);
    
  }

  public void insertKriterium(KriterienValueObject kriteriumVo) throws Exception {
    accessRemote.insertKriterium(kriteriumVo);
    
  }
}
 

Anhänge

  • tables.jpg
    tables.jpg
    69,6 KB · Aufrufe: 25
Moin,

ohne mich jetzt lange in Deinen Code reingewühlt zu haben...
updateUI() des Containers hilft recht häufig ;-)

Besten Gruss.

Zanderfilet
 
Ja stimmt, UpdateUI hilft im allgemeinen immer. Nur diesmal nicht.

Ich hab das Problem inzwischen aber gefunden, es hatte garnichts mit Swing zu tun, das Problem lag an den Daten die ich geliefert habe. Da ich die rechte Tabelle ja in Abhängigkeit des in der linken Tabelle ausgewählten Eintrags gefüllt habe, habe ich zu diesem zweck natürlich immer die selectedRow der linken Tabelle ermittelt und dann die rechte gefüllt. Durch das anzeigen des Popups verliert das Fenster mit den beiden Tabellen ja den Focus, und damit auch die information welche Row den selektiert ist.
Hab mir jetzt die selectedRow in einer Variablen gemerkt bevor das Popup kommt. Somit gehts jetzt :)
 

Neue Beiträge

Zurück