Eintragen von Personen in JTable

jofri

Mitglied
Hallo,
ich habe mir mal wieder eine Aufgabe gestellt. Ich möchte Personen mit Namen, Vornamen und Zeit in eine Tabelle (JTable) eintragen. Bisher habe ich das hier:
Java:
public class Class1 {
 
    public static void main(String[] args) {      
        String name="";
        String vorname="";
        String zeit="";
     
        int auswahl=0;
        int i=0;
        while(auswahl!=1){         
             name=JOptionPane.showInputDialog("Name");
             vorname=JOptionPane.showInputDialog("Vorname");
             zeit=JOptionPane.showInputDialog("Zeit");         
        auswahl=JOptionPane.showConfirmDialog(null,"Noch eine Person Eintragen?",null, JOptionPane.YES_NO_OPTION);
        }
     
        //Table
        JFrame frame=new JFrame();
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             
        String[] columnNames={"Name",
                              "Vorname",
                              "Zeit"
            };     
        Object [][] data={
                {name,vorname,zeit} 
                    };
             
        JTable table =new JTable(data, columnNames);
        JScrollPane scrollPane = new JScrollPane(table);
        frame.add(scrollPane, BorderLayout.CENTER);
        frame.setSize(300,150);
        frame.setVisible(true);     
    }
}
Allerdings wird gerade immer nur die letzte Person in der Tabell angezeigt. Ist ja auch logisch da der String immer nur den letzten Wert Speichert. Wie kann ich mehere Wert unter z.B. name speichern? Ich habe irgendwas mit Arrays gelesen habe jedoch nicht verstanden wie ich diese bei der Schleife anwende und wie ich Arrays in die Tabelle einfüge.
 
Zuletzt bearbeitet von einem Moderator:
schau mal...
ist nicht schön aber es soll ja nur die funktion zeigen 😉

Java:
package eu.sicusoft.tutorial.jtable;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;

public class JTableDemo {

  
    static DefaultTableModel model;
    static JTable table;
    static String[]columnNames = {"Nachname", "Vorname","Datum"};
    static JButton btnAdd;
    static JTextField tfVN, tfNN, tfDatum;
  
    // erzeugt die daten
    private static void init(){
      
        model = new DefaultTableModel(columnNames, 0);
        table = new JTable(model);
      
        btnAdd = new JButton("ADD");
        btnAdd.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // hier werden neue Daten in das MODEL geschrieben
                model.addRow(new Object[]{tfVN.getText(),tfNN.getText(),tfDatum.getText()});
                // aktualisierung
                model.fireTableDataChanged();
            }
        });
      
        tfVN = new JTextField();
        tfNN = new JTextField();
        tfDatum = new JTextField();      
    }
  
    // Panel mit textfields und einen button
    private static JPanel getControllPanel(){
      
        JPanel p = new JPanel(new GridLayout(0, 4, 10, 10));
        p.add(tfVN);
        p.add(tfNN);
        p.add(tfDatum);
        p.add(btnAdd);
        return p;
    }
  
    // main
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                  
                    init();
                  
                    JFrame f = new JFrame("JTable Demo");
                    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    f.getContentPane().add(new JScrollPane(table),BorderLayout.CENTER);
                    f.getContentPane().add(getControllPanel(),BorderLayout.SOUTH);
                    f.setSize(500, 500);
                    f.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

Ich würde generell bei Comboboxen, JTree, JTable etc immer ein eigenes oder das DefaultModel verwenden...Falls du Fragen hast einfach melden...
 

Anhänge

  • JTableDemo.PNG
    JTableDemo.PNG
    6,8 KB · Aufrufe: 22

Neue Themen


Zurück
Oben