A
auxiliumseeker
Gast
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.
das Hauptfenster
und der TabeleModell
Code:
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
Code:
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