# JTable zeile auswählen



## auxiliumseeker (6. Okt 2008)

ich habe hier eine Tabelle für CDs, jetzt würde ich gerne ein Event darauf setzen, dass wenn ich auf eine Zeile doppelklicke, ein neues Fenster mit dem Namen der CD erscheint.


```
public class CDAnwendung extends JFrame {
  // Attribute der Applikation/Anwendeung
  // die MenueZeile, an die die Menues gehaengt werden sollen
  JMenuBar dieMenuezeile = new JMenuBar();
  // Das "Datei"-Menue , an welches Menue-Punkte gehaengt werden sollen
  JMenu dateiMenue = new JMenu();
  // 2 Menuepunkte die fuer das Datei-Menue gedacht sind, wie man an dem 
  // gewaehlten Namen der Variablen vom Typ JMenuItem sieht.
  JMenuItem dateiOeffnenMenuepunkt = new JMenuItem();
  JMenuItem dateiSpeichernMenuepunkt = new JMenuItem();
  JMenuItem dateiBeendenMenuepunkt = new JMenuItem();
  // Das "Bearbeiten"-Menue , an welches Menue-Punkte gehaengt werden sollen
  JMenu bearbeitenMenue = new JMenu();
  // ein Menuepunkt fuer das "Bearbeiten"-Menue
  JMenuItem bearbeitenKopierenMenuepunkt = new JMenuItem();
  JLabel derText = new JLabel();

  //Das Scroll-Feld fuer die Tabelle
  JScrollPane ScrollFeld = new JScrollPane();

  // Die Tabelle in der die CDs angezeigt werden sollen:
  JTable CDTabelle = new JTable();

  TableModelEvent mytme;

  // Das Tabellenmodell, welches die Eigenschaften der Tabelle festlegt.
  // Das Tabellenmodell muss von uns in der entprechenden Klassendatei "CDTableModel.java"
  // festgelegt werden.
  CDTableModel unserTabellenModell;

  // Der Konstruktor, der die Methode/Prozedur jbInit
  // aufruft, die weiter unten ausprogrammiert ist.    
  public CDAnwendung() {
      jbInit();
      }

  // Die Main-Methode 
  public static void main(String[] args) {
    CDAnwendung meineCDAppli= new CDAnwendung();
    }

  // 
  private void jbInit() {
    // Fenstergroesse festlegen
    setSize(300,250);
    //  Die erscheinenden Texte der Menuepunkte festlegen
    dateiMenue.setText("Datei");
    dateiOeffnenMenuepunkt.setText("Öffnen");
    dateiOeffnenMenuepunkt.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
       CDContainer.getInstance().laden("daten.ser");
       CDTabelle.tableChanged(mytme);
      }
    });
    dateiSpeichernMenuepunkt.setText("Speichern");
    dateiSpeichernMenuepunkt.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
       CDContainer.getInstance().speichern("daten.ser");
      } 
    });

    dateiBeendenMenuepunkt.setText("Beenden");
    bearbeitenMenue.setText("Bearbeiten");
    bearbeitenKopierenMenuepunkt.setText("Neue CD anlegen...");
    // Den Menuepunkt "Neue CD anlegen..." mit einer Aktion belegen.
    // Bei einem Menueaufruf wird die unten selbst programmierte Methode
    // bearbeitenKopierenMenuepunkt_actionPerformed(e) aufgerufen !!
    bearbeitenKopierenMenuepunkt.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        bearbeitenKopierenMenuepunkt_actionPerformed(e);
      }
    });
    // Das Layout des Zeichenbereichs auf kein (null) Layout setzen.
    getContentPane().setLayout(null);
    // Menue-Zeile dem Fenster hinzufuegen 
    setJMenuBar(dieMenuezeile);

    derText.setText("Nichts ist passiert");
    derText.setBounds(new Rectangle(10, 120, 199, 17));
    // Die Menuestruktur aufbauen ...
    dieMenuezeile.add(dateiMenue);
    dieMenuezeile.add(bearbeitenMenue);
    dateiMenue.add(dateiOeffnenMenuepunkt);
    dateiMenue.add(dateiSpeichernMenuepunkt);
    dateiMenue.addSeparator();
    dateiBeendenMenuepunkt.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
	  DateiEnde_actionPerformed(e); 
      }
    });
    dateiMenue.add(dateiBeendenMenuepunkt);
    bearbeitenMenue.add(bearbeitenKopierenMenuepunkt);

    this.getContentPane().add(derText, null);

    
    // Die Groesse des Feldes, auf welches die Tabelle gesetzt werden soll, festlegen:
    ScrollFeld.setBounds(new Rectangle(10, 10, 200, 100));
    // das ScrollFeld dem Fenster hinzufuegen 
    this.getContentPane().add(ScrollFeld);
    // Zeichenbereich des  ScrollFeldes bestimmen und die Tabelle darauf hinzufuegen
    ScrollFeld.getViewport().add(CDTabelle);

    // Das Tabellenmodel anlegen. Die Klasse CDTableModel legt die Eigenschaften der 
    // Tabelle fest. Siehe auch CDTableModel.java

    unserTabellenModell = new CDTableModel();
    CDTabelle.setModel(unserTabellenModell);

    mytme = new TableModelEvent(unserTabellenModell);
    
    this.setVisible(true);
  }

  void DateiEnde_actionPerformed(ActionEvent e) {
    System.exit(0);
    
    }

  void bearbeitenKopierenMenuepunkt_actionPerformed(ActionEvent e) {
    // eine neue, leere CD zur Bearbeitung anlegen
    CD testCD = new CD();
    // den Bearbeitungsdialog für diese CD aufrufen
    CDInputDialog myDialog = new CDInputDialog(testCD);
    // den Dialog modal setzen
    myDialog.setModal(true);
    // und anzeigen
    myDialog.setVisible(true);
    // nach der Bearbeitung zeigen wir den Titel an
    derText.setText(testCD.getTitel());
    // cschelle
    CDContainer cdc;
    cdc=CDContainer.getInstance();
    if(myDialog.getOKstatus()==true)CDContainer.getInstance().addCD(testCD);
    // CDContainer.getInstance()
    cdc.TestAusgabe();
    CDTabelle.tableChanged(mytme);
  }
}
```

das Hauptfenster


```
public class CDTableModel extends AbstractTableModel {
    public int getRowCount()
    {
        return CDContainer.getInstance().getCDNumber();
        /*return 2;*/
    }

    public int getColumnCount()
    {
        return 1;
    }

    public String getColumnName(int col)
    {
		switch(col)
        {
        case 0: return "Titel der CD";
       /* case 1: return "Interpret";
        case 2: return "Ort";
        case 3: return "Spieldauer";
        case 4: return "Musikrichtung";
        case 5: return "erschienen am";
        case 6: return "verliehen an";
        case 7: return "Kopie?"; */
        default: break;
        }
        return "";
    }

    public Object getValueAt(int row, int col)
    {
        CD theCD = CDContainer.getInstance().getCD(row);
        // if(theCD != null)
		switch(col)
        {
        case 0: return theCD.getTitel();
        // case 0: return "Wo kommt dieser Eintrag her ?";
        /*
        case 0: return theCD.getTitel();
        case 1: return theCD.getInterpret();
        case 2: return theCD.getAufbewahrungsort();
        case 3: return theCD.getGesamtspieldauer();
        case 4: return theCD.getMusikrichtung();
        case 5: return theCD.getErscheinungsdatum();
        case 6: return theCD.getVerliehenAn();
        case 7: if(theCD.getIsKopie() == true) return "J"; else return "N";*/
        default: break;
        }

        return "";
    }
}
```

und der TabeleModell


----------



## GilbertGrape (6. Okt 2008)

Hallo,

Sorry, aber ich hab jetzt nicht deinen ganzen Code gelesen, aber vielleicht hilft dir ja das schon:


```
textTable.addMouseListener(new MouseAdapter() {
			public void mouseClicked(final MouseEvent e) {
				//Doppelklick auf einen Tabelleneintrag
				if (e.getClickCount() == 2) {
                                .....
         }
```
Damit kannst du den Doppelklick abfragen und mit getSelectedRow kriegst du ja dann den entsprechenden Eintrag


----------



## auxiliumseeker (6. Okt 2008)

hey das hat super geklappt, 

vielen dank


----------

