tschanne: Selekteirte Zeile Mittels table.get...

hi,
Ich hab folgendes Problem. Die Tabelle wird zwar fehlerfrei angezeigt.

Die Tabelle definiere ich in jbinit(), habs auch schon im Constructer probiert, aber bei beiden kann ich dann beim drücken eines Buttons nicht mit table.Irgendeinefunktion auf die table-funktionen zugreifen (zbs.     table.getSelectedColumns())

Warum nicht?
und wo muss denn sonst die Tabelle definieren?

Source:
---------------------
package pendenz;

import java.awt.*;
import javax.swing.*;
import com.borland.jbcl.layout.*;
import java.awt.event.*;

public class dlgSuchergebnisse extends JDialog
{
  DB DB = new DB();
  dlgFehler dlgFehler = new dlgFehler();
  JPanel panel1 = new JPanel();
  XYLayout xYLayout1 = new XYLayout();
  ScrollPane scrollPane1 = new ScrollPane();
  JButton jButtonDetails = new JButton();

String PendenzID = "";
  String[][] rowData = {};
  String columnNames[] = {
       "Pendenz-ID", "Typ", "Bezeichnung", "Priorität", "Status", "Kunde", "Start am", "Ende am", "verbleibende Tage"
   };

public dlgSuchergebnisse(Frame frame, String title, boolean modal) {
    super(frame, title, modal);
    try {
      jbInit();
      pack();
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

public dlgSuchergebnisse() {
    this(null, "", false);

}

private void jbInit() throws Exception {
    panel1.setLayout(xYLayout1);
    panel1.setMinimumSize(new Dimension(900, 500));
    panel1.setPreferredSize(new Dimension(900, 500));
    this.setResizable(false);
    this.setTitle("Pendenz-Verwaltung | Suchergebnisse");
    jButtonDetails.setText("Details");
    jButtonDetails.addActionListener(new dlgSuchergebnisse_jButtonDetails_actionAdapter(this));
    getContentPane().add(panel1);
    panel1.add(jButtonDetails, new XYConstraints(785, 460, 95, 20));

try
{
  Object[][] SuchergebnisseData = DB.GetData(0, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "");
  String rowDataC[][] = new String[SuchergebnisseData.length][SuchergebnisseData[0].length];

for(int r = 0; r < SuchergebnisseData.length; r++)
  {
    rowDataC[r][0] = SuchergebnisseData[r][0].toString();
    rowDataC[r][1] = SuchergebnisseData[r][9].toString();
    rowDataC[r][2] = SuchergebnisseData[r][1].toString();
    rowDataC[r][3] = SuchergebnisseData[r][8].toString();
    rowDataC[r][4] = SuchergebnisseData[r][10].toString();
    rowDataC[r][5] = SuchergebnisseData[r][11].toString();
    rowDataC[r][6] = SuchergebnisseData[r][2].toString();
    rowDataC[r][7] = SuchergebnisseData[r][3].toString();
    rowDataC[r][8] = "";
  }
  this.rowData = rowDataC;
}     catch(Exception ex) {
   ex.printStackTrace();
}

JTable table = new JTable(this.rowData, this.columnNames);
    panel1.add(table, new XYConstraints(20, 20, 860, 460));
    JScrollPane scrollPane = new JScrollPane( table );
    panel1.add(scrollPane, new XYConstraints(20, 20, 860, 420));
  }

void jButtonDetails_actionPerformed(ActionEvent e) {
    if(this.PendenzID.equals(""))
    {
      dlgFehler.show();
    }
  }
}

class dlgSuchergebnisse_jButtonDetails_actionAdapter implements java.awt.event.ActionListener {
  dlgSuchergebnisse adaptee;

dlgSuchergebnisse_jButtonDetails_actionAdapter(dlgSuchergebnisse adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.jButtonDetails_actionPerformed(e);
  }
}
---------------------------

  1. Hallo,

    Die Tabelle definiere ich in jbinit(), habs auch schon im Constructer probiert, aber bei beiden kann ich dann beim drücken eines Buttons nicht mit table.Irgendeinefunktion auf die table-funktionen zugreifen (zbs.     table.getSelectedColumns())

    Warum nicht?

    Weil die Variable "table" eine lokale Variable der Methode ist, die
    nur im aktuellen Block sichtbar ist -- und das ist eben die Methode
    als solche. Außerhalb der Methode ist die Variable nicht sichtbar.
    Bitte beschäftige dich mit der Sichtbarkeit von Variablen.
    (Üblicherweise gibt es hierfür ein eigenes Kapitel in deinem Java-
    Buch.)

    und wo muss denn sonst die Tabelle definieren?

    Ziemlich egal. Die jbinit() ist aber so schlecht schonmal nicht.

    Du solltest dann aber nicht folgendes schreiben:
         JTable table = new JTable(this.rowData, this.columnNames);

    Sondern nur:
         table = new JTable(this.rowData, this.columnNames);

    Wobei "table" eine _Instanzvariable_ sein muß.
    Instanzvariablen sind mindestens in der eigenen Klasse sichtbar. Wenn
    sie z.B. public sind, sogar auch für andere Klasse, die eine Referenz
    auf die Klasse haben.
    (Dem Objekt der Klasse "dlgSuchergebnisse_jButtonDetails_actionAdapter"
    wird eine solche Referenz mitgegeben.)

    Ich würde vorschlagen, du machst die Variable "table" private und
    fügst dann noch eine get-Methode hinzu.

    In der Klasse dlgSuchergebnisse_jButtonDetails_actionAdapter kannst
    du dann nämlich folgendermaßen auf die Tabelle zugreifen:
         adaptee.getTable().doSomething();

    Noch eine persönliche Anmerkung: Zum Lernen von Oberflächenprogrammierung
    und dem damit verbundenen Event-Handling solltest du es möglichst
    vermeiden auf einen grafischen Editor zurückzugreifen. Gerade als
    Anfänger weißt du überhaupt nicht, was da jetzt alles im Hintergrund
    passiert, und wieso. (Genau vor dem Problem stehst du ja.)
    Vielmehr solltest du deine ersten einfachen GUIs von Hand schreiben.
    (Muß ja nichts übermäßig komplexes sein.) Und erst, wenn du genau
    verstanden hast, was da passiert, solltest du auf einen GUI-Editor
    zurückgreifen.

    Gruß
    Slyh