Swing JTable auslesen und befüllen

Tobser

Mitglied
Hi Leute,
ich möchte gern eine JTable auslesen und neu befüllen. Mein Plan sah so aus, dass ich mittels einer Schleife die erste leere Zeile in der JTable finde, um diese dann zu füllen.
Mein erstes Problem ist, dass ich nicht weiß, wie ich die Werte der Tabelle auslesen kann, um gefüllte Zeilen zu erkennen.
Das zweite Problem wäre dann, wie ich diese gefundene Zeile füllen kann?

Kann mir jemand helfen???
 
Zuletzt bearbeitet:
Irgendwie funktioniert das nicht, wo liegt der Fehler
der Teil wird in einer methode ausgeführt, in der alle Komponenten erstellt werden
Java:
        DefaultTableModel model = new DefaultTableModel();
        model.addColumn("Nummer");
        model.addColumn("Position");
        model.addColumn("Betrag");
        JTable lastTabelle = new JTable(model);
und der Teil soll von einem Button ausgeführt werden. Auf Knopfdruck sollen die Werte aus JTextFields gelesen und in eine neue Zeile der Tabelle eingefügt werden.
Java:
                   DefaultTableModel model = (DefaultTableModel) lastTabelle.getModel();
                   model.addRow(new Object[]{"Column 1", "Column 2", "Column 3","Column 4","Column 5"});
 
Was bedeutet "Irgendwie funktioniert das nicht"?
Worin äußert sich das?

Ist lastTabelle ein Attribut der Klasse? sonst kannst du ja nicht darauf zugreifen. Mache es zu einem Attribut und verwende lastTabelle = new JTable(model); statt JTable lastTabelle = new JTable(model);

Am besten du postet die gesamte Klasse. Dann kann ich am besten was dazu sagen ...
 
In der Konsole wird, immer wenn ich den Button drücke, diese Fehlermeldung ausgegeben. Was bedeutet das?
Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
   at FEM_Hauptfenster$3.actionPerformed(FEM_Hauptfenster.java:140)
   at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
   at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
   at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
   at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
   at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
   at java.awt.Component.processMouseEvent(Unknown Source)
   at javax.swing.JComponent.processMouseEvent(Unknown Source)
   at java.awt.Component.processEvent(Unknown Source)
   at java.awt.Container.processEvent(Unknown Source)
   at java.awt.Component.dispatchEventImpl(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Window.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
   at java.awt.EventQueue.access$500(Unknown Source)
   at java.awt.EventQueue$3.run(Unknown Source)
   at java.awt.EventQueue$3.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
   at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue$4.run(Unknown Source)
   at java.awt.EventQueue$4.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue.dispatchEvent(Unknown Source)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
   at java.awt.EventDispatchThread.run(Unknown Source)
Der Button funktioniert einwandfrei.
 
Hier mal der gesamte Code:
Java:
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.event.ListDataListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.event.ListDataEvent;

import java.awt.*;


public class FEM_Hauptfenster extends JFrame {

  
   private static final long serialVersionUID = 7373328358279206718L;
   private Toolkit t;
   private int x=0,y=0,width=0,height=0;
  
   //Kompnenten
   private JPanel Mastercontainer;
   private JComboBox NaviBox;
  
   //Untercontainer
   private JPanel Startpanel;
   private JPanel Modellpanel;
   private JPanel Lastpanel;
   private JPanel Ergebnispanel;

   //Steuerelemente der einzelnen Panels
   //Startpanel
   private JLabel StartLabel;
   //Modellpanel
   private JLabel ModellLabel;
   private JLabel EModulLabel;
   private static JTextField EModulfeld;
   private JLabel FlaechenmomentLabel;
   private static JTextField Flaechenmomentfeld;
   private JLabel LaengeLabel;
   private static JTextField Laengefeld;
   //Lastpanel
   private JLabel LastLabel;
   private JPanel LastEingabepanel;
   private JLabel PositionLabel;
   private JTextField Positionfeld;
   private JLabel BetragLabel;
   private JTextField Betragfeld;
   private JButton AddLast;
   private JButton StartBerechnung;
   private JScrollPane Tabellenfenster;
   //private DefaultTableModel model;
   private JTable lastTabelle;
   private Object[][] data=new Object[Modell.AnzahlLasten][3];
   //Ergebnispanel
   private JLabel ErgebnisLabel;
   private JTable Ergebnistabelle;
  
  

   public static void main(String[] args) {
       EventQueue.invokeLater(new Runnable() {
           public void run() {
               try {
                   FEM_Hauptfenster frame = new FEM_Hauptfenster();
                   frame.setVisible(true);
               } catch (Exception e) {
                   e.printStackTrace();
               }
           }
       });
   }


   public FEM_Hauptfenster() {
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
       //Ermittlung der Fenstergröße und Position für Vollbild
       t=Toolkit.getDefaultToolkit();
       Dimension d=t.getScreenSize();
       width=t.getScreenSize().width;
       height=t.getScreenSize().height;
       x=(int)((d.getWidth()-width)/2);
       y=(int)((d.getHeight()-height)/2);
       setBounds(x, y, width, height);
      
       this.initComponents();
       this.initListeners();
      
       setVisible(true);
      
   }

   private void initListeners() {
       this.NaviBox.addItemListener(new ItemListener(){
           public void itemStateChanged(ItemEvent e){
               if(e.getItem().equals("Start")){
                   Mastercontainer.remove(Modellpanel);
                   Mastercontainer.remove(Lastpanel);
                   Mastercontainer.remove(Ergebnispanel);
                  
                   Mastercontainer.add(Startpanel);
                   Mastercontainer.repaint();
                   validate();
               }
               if(e.getItem().equals("Modell")){
                   Mastercontainer.remove(Startpanel);
                   Mastercontainer.remove(Lastpanel);
                   Mastercontainer.remove(Ergebnispanel);
                  
                   Mastercontainer.add(Modellpanel);
                   Mastercontainer.repaint();
                   validate();
               }
               if(e.getItem().equals("Lasten")){
                   Mastercontainer.remove(Modellpanel);
                   Mastercontainer.remove(Startpanel);
                   Mastercontainer.remove(Ergebnispanel);
                  
                   Mastercontainer.add(Lastpanel);
                   Mastercontainer.repaint();
                   validate();
               }
               if(e.getItem().equals("Ergebnisse")){
                   Mastercontainer.remove(Modellpanel);
                   Mastercontainer.remove(Lastpanel);
                   Mastercontainer.remove(Startpanel);
                  
                   Mastercontainer.add(Ergebnispanel);
                   Mastercontainer.repaint();
                   validate();
               }

           }
       });
      
       AddLast.addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent e) {
               if(e.getSource()==AddLast){
                   DefaultTableModel model = (DefaultTableModel) lastTabelle.getModel();
                   model.addRow(new Object[]{"Column 1", "Column 2", "Column 3","Column 4","Column 5"});
                   //System.out.println(Positionfeld.getText());
                   //System.out.println(Betragfeld.getText());
               }
              
           }
          
       });

       StartBerechnung.addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent e) {
               if(e.getSource()==StartBerechnung){
                   Berechnung.main(null);
                  
               }
              
           }
          
       });
      
   }


   private void initComponents() {
       this.getContentPane().setLayout(new BorderLayout());
       //Anlegen aller Panels
       //Erzeugen des Containers für Panels und ComboBox im Hauptfenster
       this.Mastercontainer = new JPanel(new CardLayout());
       this.NaviBox=new JComboBox(new String []{"Start","Modell","Lasten","Ergebnisse"});
       this.NaviBox.setEditable(false);
      
      
       //Initialisieren der Untercontainer
       this.Startpanel = new JPanel();
       this.Modellpanel = new JPanel(new GridBagLayout());
       this.Lastpanel=new JPanel(new BorderLayout());
       this.Ergebnispanel=new JPanel(new BorderLayout());

       GridBagConstraints c=new GridBagConstraints();
      
      
       //Startpanel
       //Initialisieren der Steuerelemente
       this.StartLabel=new JLabel("Dieses Programm berechnet einen Biegebalken unter Eizellast mit Hilfe der FEM");
       //Hinzufügen zum Panel
       this.Startpanel.add(this.StartLabel);
      
      
       //Modellpanel
       //Initialisieren der Steuerelemente
       this.ModellLabel=new JLabel("Hier werden die einzelnen Modellparameter festgelegt");
       this.EModulLabel=new JLabel("EModul:");
       EModulfeld=new JTextField("EModul eingeben");
       this.FlaechenmomentLabel=new JLabel("Flächenmoment:");
       Flaechenmomentfeld=new JTextField("Flächenträgheitsmoment eingeben");
       this.LaengeLabel=new JLabel("Modelllänge:");
       Laengefeld=new JTextField("Modelllänge eingeben");
      
       //Hinzufügen der Steuerelemente
       //ModellLabel
       c.fill=GridBagConstraints.HORIZONTAL;
       c.anchor=GridBagConstraints.CENTER;
       c.gridx=0;
       c.gridy=0;
       c.insets=new Insets(10,10,10,10);
       this.Modellpanel.add(this.ModellLabel,c);
      
       //EModulLabel
       c.fill=GridBagConstraints.HORIZONTAL;
       c.anchor=GridBagConstraints.PAGE_START;
       c.gridx=0;
       c.gridy=1;
       c.gridwidth=3;
       c.insets=new Insets(10,10,10,10);
       this.Modellpanel.add(this.EModulLabel,c);
      
       //EModulfeld
       c.fill=GridBagConstraints.HORIZONTAL;
       c.anchor=GridBagConstraints.PAGE_END;
       c.gridx=1;
       c.gridy=1;
       c.gridwidth=3;
       c.insets=new Insets(10,10,10,10);
       this.Modellpanel.add(this.EModulfeld,c);
      
       //FlaechenmomentLabel
       c.fill=GridBagConstraints.HORIZONTAL;
       c.anchor=GridBagConstraints.PAGE_START;
       c.gridx=0;
       c.gridy=2;
       c.gridwidth=3;
       c.insets=new Insets(10,10,10,10);
       this.Modellpanel.add(this.FlaechenmomentLabel,c);
      
       //Flaechenmomentfeld
       c.fill=GridBagConstraints.HORIZONTAL;
       c.anchor=GridBagConstraints.PAGE_END;
       c.gridx=1;
       c.gridy=2;
       c.gridwidth=3;
       c.insets=new Insets(10,10,10,10);
       this.Modellpanel.add(this.Flaechenmomentfeld,c);
      
       //LaengeLabel
       c.fill=GridBagConstraints.HORIZONTAL;
       c.anchor=GridBagConstraints.PAGE_START;
       c.gridx=0;
       c.gridy=3;
       c.gridwidth=3;
       c.insets=new Insets(10,10,10,10);
       this.Modellpanel.add(this.LaengeLabel,c);
      
       //Laengefeld
       c.fill=GridBagConstraints.HORIZONTAL;
       c.anchor=GridBagConstraints.PAGE_END;
       c.gridx=1;
       c.gridy=3;
       c.gridwidth=3;
       c.insets=new Insets(10,10,10,10);
       this.Modellpanel.add(this.Laengefeld,c);
      
       //Lastpanel
       //Initialisieren der Steuerelemente
       this.LastLabel=new JLabel("Hier sind die einzelnen Lasten mit ihren Position und ihren Beträgen zu definieren");
       this.LastEingabepanel=new JPanel(new GridLayout(0,2));
       this.PositionLabel=new JLabel("Position:");
       this.Positionfeld=new JTextField("Position eingeben");
       this.BetragLabel=new JLabel("Betrag:");
       this.Betragfeld=new JTextField("Betrag eingeben");
       this.AddLast=new JButton("Last erzeugen");
       this.StartBerechnung=new JButton("Starten der Berechnung");
       /*
       //Tabellenkopf
       String[] columnNames = {"Nummer",
                     "Position",
                     "Betrag",
                     };
       //Daten
       Object[][] data = {
               {new Integer(1), new Integer(70), new Integer(1000)},
       };
       this.lastTabelle=new JTable(data,columnNames);*/
      
      
        DefaultTableModel model = new DefaultTableModel();
        model.addColumn("Nummer");
        model.addColumn("Position");
        model.addColumn("Betrag");
        JTable lastTabelle = new JTable(model);
       this.Tabellenfenster=new JScrollPane(lastTabelle);

      

       //Hinzufügen der Sterelemente
       Lastpanel.add(LastLabel, BorderLayout.PAGE_START);
       Lastpanel.add(LastEingabepanel, BorderLayout.CENTER);
       Lastpanel.add(Tabellenfenster, BorderLayout.PAGE_END);
       //Hinzufügen der Steuerelemente zum Steuerpanel
       LastEingabepanel.add(PositionLabel);
       LastEingabepanel.add(Positionfeld);
       LastEingabepanel.add(BetragLabel);
       LastEingabepanel.add(Betragfeld);
       LastEingabepanel.add(AddLast);
       LastEingabepanel.add(StartBerechnung);
      
       //Ergebnispanel
       //Initialisieren der Steuerelemente
       this.ErgebnisLabel=new JLabel("Hier werden die Ergebnisse der Berechnung ausgegeben*");
       //Hinzufügen der Steuerelemente
       this.Ergebnispanel.add(this.ErgebnisLabel);
      
      
       //Hinzufgen der Panels zum Mastercontainer
       this.Mastercontainer.add(this.Startpanel,"Startpanel");
       this.Mastercontainer.add(this.Modellpanel,"Modellpanel");
       this.Mastercontainer.add(this.Lastpanel,"Lastpanel");
       this.Mastercontainer.add(this.Ergebnispanel,"Ergebnispanel");
      
      
       this.getContentPane().add(this.NaviBox, BorderLayout.PAGE_START);
       this.getContentPane().add(Mastercontainer, BorderLayout.CENTER);
   }

   static double getI(){
       return Double.parseDouble(Flaechenmomentfeld.getText());
   }
  
   static double getE(){
       return Double.parseDouble(EModulfeld.getText());
   }
  
   static double getL(){
       return Double.parseDouble(Laengefeld.getText());
   }


}
Mein Ziel ist es, mit Hilfe des Buttons AddLast die Werte aus Textfeldern in die Tabelle einzutragen.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben