Frage zu JTable

Status
Nicht offen für weitere Antworten.
J

Jens

Gast
Ich hab folgendes Problem.
ich zeig euch einfach mal meinen Code:

Code:
public class TablePoolInputScreen extends JInternalFrame
{
    Database database;

    TablePool[] allTablePools;
    TableDescriptor[] tablesTablePool;


    TabPool tabPool;
    Tab tab;
    JTable table, table2;


    public TablePoolInputScreen(Database database)
    {
        super("Tabellenpools",
              true, //resizable
              true, //closable
              false, //maximizable
              true);//iconifiable);

        this.database = database;

        try
         {
             // Methode aus DBMUpdateMode wird aufgerufen.
             // Array mit allen Aktualisierungsschlüsseln wird erstellt
             allTablePools = new DBMTablePool().makeAllTablePools(database);
         }

         catch(Exception e)
         {
             e.printStackTrace();
         }


        // neuer Container für die GUI wird erstellt
        Container contentPane = getContentPane();

        // dem Container wird ein Layout zugeordnet
        contentPane.setLayout(new BoxLayout(contentPane,3));

        // Table Models werden erstellt
        tabPool = new TabPool();
        table = new JTable(tabPool);

        // Table Models werden erstellt
        tab  = new Tab();
        table2 = new JTable(tab);

        try
        {
            // Table Models werden erstellt
            tab  = new Tab();
            table2 = new JTable(tab);
        }
        catch(NullPointerException e)
        {
            JOptionPane.showMessageDialog(table2, "DBADT-GUI (C)2004 by Jens Lucaßen", "About", JOptionPane.ERROR_MESSAGE);
        }


        // Scroll Panes werden den Table Models zugeordnet
        contentPane.add(new JScrollPane(table), BorderLayout.CENTER);
        contentPane.add(new JScrollPane(table2), BorderLayout.CENTER);
        contentPane.add(new ShowTables(), BorderLayout.SOUTH);
        contentPane.add(new ControlPanel(), BorderLayout.SOUTH);
    }

//--------------------------------------------------------------------------------------------------------

/*
* Control Panel für die Buttons wird erstellt und dem Frame hinzugefügt
*/


    class ControlPanel extends JPanel implements ActionListener
    {

        int row, col;
        Object value = new Object();

        JButton saveButton = new JButton("Übernehmen");
        JButton rejectButton = new JButton("Verwerfen");

        public ControlPanel()
        {
            GridLayout gridLay = new GridLayout(0, 2);
            setLayout(gridLay);

            saveButton.setToolTipText("Änderungen in der Tabelle werden in der Datenbank gespeichert");
            rejectButton.setToolTipText("Änderungen werden rückgängig gemacht");

            add(saveButton);
            add(rejectButton);

            saveButton.addActionListener(this);
            rejectButton.addActionListener(this);
        }

        public void actionPerformed(ActionEvent evt)
        {
            Object source = evt.getSource();

            try
            {
                if (source == saveButton)
                {
                }

                if (source == rejectButton)
                {
                    allTablePools = new DBMTablePool().makeAllTablePools(database);
                    tabPool.fireTableDataChanged();
                }
            }

            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }

//--------------------------------------------------------------------------------------------------------

/*
 * Button wird erstellt und dem Frame hinzugefügt
 * Die Tabellen die zum selektierten Tabellen-Pool gehören werden angezeigt
*/

    class ShowTables extends JPanel implements ActionListener
    {

        int row, col;
        Object value = new Object();

        JButton showTablesButton = new JButton("Tabellen anzeigen");

        public ShowTables()
        {
            GridLayout gridLay = new GridLayout(0, 1);
            setLayout(gridLay);

            showTablesButton.setToolTipText("Änderungen in der Tabelle werden in der Datenbank gespeichert");

            add(showTablesButton);

            showTablesButton.addActionListener(this);
        }

        public void actionPerformed(ActionEvent evt)
        {
            Object source = evt.getSource();
            int zeile, spalte;
            String value;

            try
            {
                if (source == showTablesButton)
                {
                    zeile = table.getSelectedRow();
                    spalte = table.getSelectedColumn();

                    value = ((String)tabPool.getValueAt(zeile,spalte));

                    //System.out.println(value.substring(value.length()- 3, value.length() - 1));
                    Integer a = new Integer(value.substring(value.lastIndexOf('(') + 1, value.lastIndexOf(')')));
                    System.out.println("ID: " + a);

                    try
                     {
                         // Methode aus DBMTablePool wird aufgerufen.
                         // Array mit allen Tabellen für den übergebenen TabellenPool wird erstellt
                         tablesTablePool = new DBMTablePool().makeTables(database,a);
                     }

                     catch(Exception e)
                     {
                         e.printStackTrace();
                     }

                    for (int zaehler = 0; zaehler < tablesTablePool.length; zaehler++)
                        System.out.println("tablesTablePool: " + tablesTablePool[zaehler].getId());
                }
            }

            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }


//-----------------------------------------------------------------------------------------------------------

/*
* Table Model für die Tabellen Pools wird erstellt.
* Es wird dabei der Name angezeigt
*/


    class TabPool extends AbstractTableModel
    {
        final String[] columnNames = {"Tabellen Pool (ID)"
                                       };


        public boolean isCellEditable(int row, int column)
        {
            return true;
        }


        public int getColumnCount()
        {
            return columnNames.length;
        }



        public int getRowCount()
        {
            return allTablePools.length;
        }

        public String getColumnName(int col)
        {
            return columnNames[col];
        }

        public Object getValueAt(int row, int col)
        {
            switch (col)
            {
                case 0:
                    return allTablePools[row].getName() + " (" + allTablePools[row].getId() + ")";

                default: return null ;
            }

        }

        public void setValueAt(Object value, int row, int col)
        {
            if ( col == 0 )
                allTablePools[row].setName((String)value);

            fireTableCellUpdated(row, col);
        }


    }

//-----------------------------------------------------------------------------------------------------------

/*
* Table Model für die Tabellen die zum selektierten Tabellen Pool gehören wird erstellt.
* Es wird dabei der Name angezeigt
*/


    class Tab extends AbstractTableModel
    {
        final String[] columnNames = {"Tabellen"
                                       };

        public int getColumnCount()
        {
            return columnNames.length;
        }



        public int getRowCount()
        {
            //return tablesTablePool.length;
            return 1;
        }


        public String getColumnName(int col)
        {
            return columnNames[col];
        }

        public Object getValueAt(int row, int col)
        {
            switch (col)
            {
                case 0:
                    return tablesTablePool[row].getName();

                default: return null ;
            }
        }

        public void setValueAt(Object value, int row, int col)
        {
            if ( col == 0 )
                tablesTablePool[row].setName((String)value);
            fireTableCellUpdated(row, col);
        }

    }
}


Jetzt zu meinem Problem:
Wie ihr sehen könnt hab ich zwei Table Models in meinem Frame.
Ich möchte das Frame so aufbauen das sobald es geöffnet wird das erste TableModel mit daten aus ner datenbank gefüllt wird. Das funktioniert auch.
Das zweite TableModel soll beim öffnen des Frames schon angezeigt werden aber noch nicht gefüllt sein.
Erst wenn ich den Button "showTablesButton" drücke soll das zweite Table Model gefüllt werden.
Ich weis aber nicht wo ich das zweite TableModel einbaue so das es beim öffnen leer angezeigt wird und dann beim button drücken gefüllt wird. Ich hab es zuerst im Konstruktor (siehe oben) eingefügt aber da krieg ich natürlich ne Null Pointer Exception weil ich noch keine Daten hab. Um die Daten zu kriegen muss ich nämlich aus dem ersten Table einen eintrag mit der maus auswählen und dann den "showTablesButton" drücken um die Daten aus der Datenbank zu bekommen.
Vielleicht kann mir ja jemand weiterhelfen.
Vielen Dank.

PS: wenn noch fragen zum code sind dann meldet euch
 
B

Beni

Gast
Ich hab ehrlich gesagt nicht den ganzen Quellcode durchgesehen, und stütze mich nur auf deine Angaben.

Mein Vorschlag: die Anzahl Rows = 0 setzen, sollten zuwenige Daten vorhanden sein:

Code:
public int getRowCount(){
  if( allTablePools == null )
    return 0;
  else
    return allTablePools.length;
}

Sobald mehr Daten angezeigt werden sollen, rufst du AbstractTableModel#fireTableDataChanged() auf.

Oder du gibst einfach "" (leerer String) bei getValue zurück, sollte nichts vorhanden sein.

mfg Beni
 
J

Jens

Gast
Das funktioniert jetzt soweit. vielen Dank.
hab aber noch ne frage:

Ich regel das jetzt so das ich einen eintrag aus dem ersten TableModel selektiren muss.
dann kann ich den Button drücken und die zum selektierten eintrag im ersten TableModel passenden Daten werden im zweiten tableModel angezeigt.
Kann ich das auch ohne den Button machen. z.B. mit nem Listener oder so?
Ich will das so haben das sobald ich nen eintrag im ersten tableModel selektiere die passenden Daten im zweiten tableModel angezeigt werden.
Geht das irgendwie???
 
J

Jens

Gast
Illuvatar hat gesagt.:
JTable#getSelectionModel().addListSelectionListener (ListSelecttionListener)

Ich hab das jetzt soweit gelöst:
Code:
tabPool = new TabPool();
table = new JTable(tabPool).getSelectionModel().addListSelectionListener(***);

Nur was muss anstelle der Sternchen in die Klammer???
 
B

Beni

Gast
Ein ListSelectionListener natürlich :roll: :wink:

Du musst das Interface ListSelectionListener implementieren. Dass funktioniert genau gleich, wie wenn du einem Button ein ActionListener übergibst (und das kannst du ja schon :bae: ).

mfg Beni
 
J

Jens

Gast
Kannst du mir das mal in nem Code erklären??
Verstehe das irgendwie nicht so ganz. oder ich hab grad ein brett vorm kopf und komm einfach nicht drauf
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Swing Frage zur Vorgehensweise (JTable?, JLabels?) AWT, Swing, JavaFX & SWT 8
S Frage zu Jtable / CellEditor AWT, Swing, JavaFX & SWT 1
N Swing JTable anfänger frage AWT, Swing, JavaFX & SWT 2
F unspezifizierte Frage zu JTable/ Model AWT, Swing, JavaFX & SWT 6
C jTable Frage zu setAutoCreateRowSorter AWT, Swing, JavaFX & SWT 6
G Frage zu JTable AWT, Swing, JavaFX & SWT 3
G Frage zu JTable und TableModel AWT, Swing, JavaFX & SWT 4
M Abhängige JTable - MCV - Frage zu Struktur AWT, Swing, JavaFX & SWT 5
J Frage zu JTable und der Überschrift/Titelzeile AWT, Swing, JavaFX & SWT 2
R Frage zu Listfeld oder jTable, auch andere Fragen AWT, Swing, JavaFX & SWT 5
M Frage zu JTabbedPane + JScrollPane + JTable AWT, Swing, JavaFX & SWT 5
G Frage zu JTable AWT, Swing, JavaFX & SWT 17
T Frage zu Listener für JTable AWT, Swing, JavaFX & SWT 19
T JTable Array Frage AWT, Swing, JavaFX & SWT 22
T Frage zu JTable AWT, Swing, JavaFX & SWT 12
E Frage zum Schieberegler JSlider AWT, Swing, JavaFX & SWT 5
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 10
M Frage zu Java Bundesligaverwaltung AWT, Swing, JavaFX & SWT 7
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 9
E Frage zum Textfeld AWT, Swing, JavaFX & SWT 8
H Swing JMenu aufgeklappt oder nicht - Wie frage ich das ab? AWT, Swing, JavaFX & SWT 5
pkm Frage wegen java.lang.IllegalStateException bei DocumentListener AWT, Swing, JavaFX & SWT 4
D Frage zu ActionListenern und AvtionEvents AWT, Swing, JavaFX & SWT 2
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
F JavaFX Frage zum Logging AWT, Swing, JavaFX & SWT 6
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
ralfb1105 Swing Frage zu SwingWorker Verhalten bei cancel() AWT, Swing, JavaFX & SWT 2
J Frage zu setuserdata AWT, Swing, JavaFX & SWT 1
N Frage zu ListView AWT, Swing, JavaFX & SWT 11
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
J Event Handling Frage zu der Funktion addActionListener AWT, Swing, JavaFX & SWT 2
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
T JavaFX Frage zum FX-Loader AWT, Swing, JavaFX & SWT 3
B drawRect Frage und Aufgabenstellung AWT, Swing, JavaFX & SWT 10
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
S Frage zu java.awt.EventQueue AWT, Swing, JavaFX & SWT 1
J Frage zu Java Projekt [2D Game] AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Frage zum Loggen von Fehlern AWT, Swing, JavaFX & SWT 3
T Swing API Frage zu Verzeichnisbäumen und JTree AWT, Swing, JavaFX & SWT 1
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q Cursor Frage AWT, Swing, JavaFX & SWT 8
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
H Taschenrechnerprojekt in Javafx - Frage zu den Buttons in FXML AWT, Swing, JavaFX & SWT 1
I Grundsätzliche Frage zu ItemListener AWT, Swing, JavaFX & SWT 11
X Kurze Frage zu JPopup AWT, Swing, JavaFX & SWT 3
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
D Frage zu JFrame und Graphics AWT, Swing, JavaFX & SWT 4
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
G noch eine Frage zum EventDispachThread AWT, Swing, JavaFX & SWT 4
D MVC Frage AWT, Swing, JavaFX & SWT 6
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Frage AWT, Swing, JavaFX & SWT 5
Luk10 g.drawString funktioniert nicht + Frage zur Text-Rendering Qualität AWT, Swing, JavaFX & SWT 7
Luk10 Frage zu Farb-Komposition AWT, Swing, JavaFX & SWT 9
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
V SWT Import Wizard - frage zur WizardPage AWT, Swing, JavaFX & SWT 5
N Swing Frage JXMapviewer AWT, Swing, JavaFX & SWT 4
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
lumo SWT Zeichnen bescheunigen bzw eine allg. Frage AWT, Swing, JavaFX & SWT 8
H Frage zu übergebenem Vector bzw. Boolean AWT, Swing, JavaFX & SWT 3
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
VfL_Freak Swing Frage zu "new JPasswordField( 10 )" AWT, Swing, JavaFX & SWT 6
H Frage zu WindowBuilder Pro AWT, Swing, JavaFX & SWT 3
C Frage/Problem mit Jpanel AWT, Swing, JavaFX & SWT 4
S Frage zu TextArea AWT, Swing, JavaFX & SWT 2
GUI-Programmer Zeichnen in Swing - Frage AWT, Swing, JavaFX & SWT 6
Luk10 Frage zu Mouseevents AWT, Swing, JavaFX & SWT 7
J Refreshing Swing Frage AWT, Swing, JavaFX & SWT 10
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
A Frage zu StringBuilder AWT, Swing, JavaFX & SWT 2
S allg. Frage zur GUI-Architektur AWT, Swing, JavaFX & SWT 5
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A Frage zur Methode matches() AWT, Swing, JavaFX & SWT 2
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
H Allgemeine Frage zu Grafikfähigkeiten von Java AWT, Swing, JavaFX & SWT 24
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
Jats Frage zu JLabel & JTextField AWT, Swing, JavaFX & SWT 4
Y frage zu BufferedImage AWT, Swing, JavaFX & SWT 7
hdi Swing Frage zu invokeAndWait() Exceptions AWT, Swing, JavaFX & SWT 8
P Swing Frage zu paintComponent/getGraphics AWT, Swing, JavaFX & SWT 4
M Frage nach Swing Element AWT, Swing, JavaFX & SWT 3
S Frage zu Graphics2D AWT, Swing, JavaFX & SWT 3
T AWT Frage zu AWT AWT, Swing, JavaFX & SWT 5
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
B SWT Frage zu MVC und Data-Binding AWT, Swing, JavaFX & SWT 8
T LookAndFeel Look and Feel Frage AWT, Swing, JavaFX & SWT 2
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
P Kurze Frage zur Gestaltung eines vertikalen Menüs AWT, Swing, JavaFX & SWT 2
Dit_ Frage zum Thema SwingUtilities.invokeLater AWT, Swing, JavaFX & SWT 5
Eldorado Frage zur Anwendung des MVC-Konzept AWT, Swing, JavaFX & SWT 33

Ähnliche Java Themen


Oben