Probleme bei Übertrag von ArrayList in Jtable

Darkness88

Neues Mitglied
Hallo Leute, ich nutze diesen Thread direkt einmal, um mich vorzustellen.
Ich heiße Tobias und bin ein "Anfänger" was Java an geht und arbeite mich solangsam hier rein.

Doch hänge ich direkt schon an einem Problem, welches ich nicht gelöst bekomme und somit hoffe ich, dass ihr mir helfen könnt.

Über die GUI kann ich einen neuen Flug hinzufügen und dann im JOptionPane Fracht- oder Passagierflugzeug aussuchen. Dann werden die einzelnen Informationen abgefragt die man eingeben muss.

Diese Informationen sollen dann in einer ArrayList gespeichert werden und in der GUI mit einem Jtable in echtzeit dargestellt werden....

An Bekannter von mir der Programmierer ist, hat mir dabei geholfen, weil ich noch lange nicht über solches Wissen verfüge.... doch hat er auch an dem Punkt gehangen, dass die Werte nicht in das JTable übertragen werden...

Ich sehe auch nicht ob es nur an dem übertrag an das JTable liegt, oder ob es an ganz anderen Dingen hapert....

Die systemprintout Zeilen sind nur zum Test drin und wurden auskommentiert.

Hier mal der Code: oder das komplette Programm hochgeladen: kostenlos Dateien hochladen bei File Upload X

Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*; //Event brauchen wir für das Ereigniss, wenn ein Button geklickt wird
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;

import java.awt.GridLayout;
import java.util.ArrayList;

/*
 * import javax.swing.JScrollPane;
 * import java.awt.Dimension;
 * import java.awt.event.MouseAdapter;
 * import java.awt.event.MouseEvent;
 */

public class Datenbank extends JFrame
{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    public JButton button1;
    public JButton button2;
    public JButton button3;
    public JButton button4;
    public JPanel panelButton, panelLabel, panelRadio;
    public JLabel oben;
    public JTable liste;
    public JScrollPane spane;
    public ArrayList<Flugzeug> array;
    public String[][] data; 
    DefaultTableModel dtm;

     public Datenbank()
     {
    	 super("Kontrollterminal");
    	 
    	 // Arraylist instanzieren
         array = new ArrayList<Flugzeug>();
         //Fenster erzeugen
         setLocation(300,300);
         setSize (600,200);
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         setLayout(new BorderLayout(5,5));

         //Panels erzeugen
         panelButton = new JPanel(new GridLayout(4,1));    
         panelRadio = new JPanel(new GridLayout(2,1));
         
         //Buttons erzeugen
         button1 = new JButton("Neuer Flug hinzufügen");
         button2 = new JButton("Flug löschen");
         button3 = new JButton("Flug bearbeiten");
         button4 = new JButton("Liste ausdrucken");

        
         //Auf Panel Buttons packen
         panelButton.add(button1);
         panelButton.add(button2);
         panelButton.add(button3);
         panelButton.add(button4);

         
         //Listener für Buttons
         addButtonListener(button1);
         addButtonListener(button2);
         addButtonListener(button3);
         addButtonListener(button4);

         //Labels erzeugen
         oben = new JLabel("Flüge verwalten");
       
         //Label zentrieren
         oben.setHorizontalAlignment(JLabel.CENTER); 
         
         //Label dem Panel hinzufügen
         
            
        String[] cNames = {"Flugnummer","Startzeit","Startbahn","Ankunft"};
        dtm = new DefaultTableModel(data, cNames);
        liste = new JTable(dtm);
        spane = new JScrollPane(liste);
        
         
         //Panels auf Frame packen 
         add(BorderLayout.WEST, panelButton);
         add(BorderLayout.NORTH, oben);
         add(BorderLayout.CENTER, spane);
         
         // Das Fenster wird Sichtbar gemacht
         setVisible(true);
    }

     public static void main(String[] args)
     {
         new Datenbank();
     }

     private void addButtonListener(JButton b)
     {
         b.addActionListener(new ActionListener() 
         { 
	         public void actionPerformed(ActionEvent e) 
	         { 
		         if(e.getSource() == button1)
		         {
			         try
			         {
			        	 	Object[] auswahl = {"Passagierflugzeug", "Frachtflugzeug"};
			        	 	
			        	 	String h = (String) JOptionPane.showInputDialog(null, "Wählen Sie einen Flugzeugtyp:", "Frage",JOptionPane.QUESTION_MESSAGE,null,auswahl,"Passagierflugzeug");
			        	 	String a = JOptionPane.showInputDialog(null, "Geben sie die Flugnummer ein: ", "Eingabeterminal", 3);
			        	 	String d = JOptionPane.showInputDialog(null, "Geben sie die Anzahl der Flugbegleiter ein: ", "Eingabeterminal", 3);
			        	 	
			        	 	if(h.equals("Passagierflugzeug"))
			        	 	{	 		
			        	 		
				                String b = JOptionPane.showInputDialog(null, "Geben sie die Anzahl der Passagiere ein: ", "Eingabeterminal", 3);
				                String c = JOptionPane.showInputDialog(null, "Geben sie die Anzahl der Gesamtplätze ein: ", "Eingabeterminal", 3);
				                
				                			               
				                int w = Integer.parseInt(a);
				                int x = Integer.parseInt(b);
				                int y = Integer.parseInt(c);
				                int z = Integer.parseInt(d);
				                
				                
				                
				                
				                
				                Passagierflugzeug pf = new Passagierflugzeug(w, x, y, z );
				                array.add(pf);
			        	 	}
			        	 	else
			        	 	{
			        	 		 String b = JOptionPane.showInputDialog(null, "Geben sie die Ladung ein: ", "Eingabeterminal", 3);
					             String c = JOptionPane.showInputDialog(null, "Geben sie das Gewicht ein: ", "Eingabeterminal", 3);
					                
					                			               
					             int w = Integer.parseInt(a);
					             int y = Integer.parseInt(c);
					             int z = Integer.parseInt(d);
					                
					             Frachtflugzeug ff = new Frachtflugzeug(b, y, w,z);
					             array.add(ff);
			        	 	}
			        	 
			        	 	
			                
			                
			                
			          }
			          catch (NumberFormatException g)
		              {
		                    System.out.println("Fehler!");
		              } 
			         data = new String[array.size()][4];
			         /*
			         System.out.println("Arraygröße: "+ array.size());
			         System.out.println(array.toString());
			         */
			         for(int i =0; i<array.size(); i++)
			         {
			        	 if(array.get(i) instanceof Passagierflugzeug)
			        	 {
			        		/*
			        		 *  System.out.println(i);
			        		 *  System.out.println("Array:"+ array.get(i));
			        		 */ 
			        		 Passagierflugzeug pf = (Passagierflugzeug) array.get(i);
			        		 data[i][0]= Integer.toString(pf.getGesamtPlaetze());
			        		 data[i][1]= Integer.toString(pf.getPassagierAnzahl());
			        		 data[i][2]= Integer.toString(pf.getBesatzungsAnzahl());
			        		 data[i][3]= Integer.toString(pf.getFlugnummer());
			        		
			        	 }
			        	 else
			        	 {
			        		 Frachtflugzeug ff = (Frachtflugzeug) array.get(i);
			        		 data[i][0]= Integer.toString(ff.getLadegewicht());
			        		 data[i][1]= ff.getFracht();
			        		 data[i][2]= Integer.toString(ff.getBesatzungsAnzahl());
			        		 data[i][3]= Integer.toString(ff.getFlugnummer());
			        	 }
			         }
			         /*
			         for(int i=0; i<array.size(); i++)
			         {
			        	 for (int k= 0 ;k<4; k++)
			        	 {
			        		 System.out.println(data[i][k]);
			        	 }
			        	 System.out.println("");
			         }
			         dtm.fireTableDataChanged();
			         
			         
			         liste.repaint();
			         liste.revalidate();
			         repaint();
			         revalidate();
			         */
		        }
		        if(e.getSource() == button2)
		        {
		            System.out.println("Button2");
		        }
		         
		        if(e.getSource() == button3)
		        {
		            System.out.println("Button3");
		        }
		         
		        if(e.getSource() == button4)
		        {
		            System.out.println("Button4");
		        }
	          }
         });
         
     }

  /*   private void eingabe(String a)
     {
         anzeige.setText(a);
     }  
  */  
 }


Danke schon einmal für eure Hilfe
 
Deklarier deine cNames mal als Klassenvariable und füge mal
Java:
			         dtm = new DefaultTableModel(data, cNames);
			         liste.setModel(dtm);
vor deiner auskommentierten for-schleife ein.

Das deine Klasse so aussieht:

Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*; //Event brauchen wir für das Ereigniss, wenn ein Button geklickt wird
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;

import java.awt.GridLayout;
import java.util.ArrayList;

/*
 * import javax.swing.JScrollPane;
 * import java.awt.Dimension;
 * import java.awt.event.MouseAdapter;
 * import java.awt.event.MouseEvent;
 */

public class Datenbank extends JFrame
{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    public JButton button1;
    public JButton button2;
    public JButton button3;
    public JButton button4;
    public JPanel panelButton, panelLabel, panelRadio;
    public JLabel oben;
    public JTable liste;
    public JScrollPane spane;
    public ArrayList<Flugzeug> array;
    public String[][] data; 
    DefaultTableModel dtm;
    public String[]cNames;

     public Datenbank()
     {
    	 super("Kontrollterminal");
    	 
    	 // Arraylist instanzieren
         array = new ArrayList<Flugzeug>();
         //Fenster erzeugen
         setLocation(300,300);
         setSize (600,200);
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         setLayout(new BorderLayout(5,5));

         //Panels erzeugen
         panelButton = new JPanel(new GridLayout(4,1));    
         panelRadio = new JPanel(new GridLayout(2,1));
         
         //Buttons erzeugen
         button1 = new JButton("Neuer Flug hinzufügen");
         button2 = new JButton("Flug löschen");
         button3 = new JButton("Flug bearbeiten");
         button4 = new JButton("Liste ausdrucken");

        
         //Auf Panel Buttons packen
         panelButton.add(button1);
         panelButton.add(button2);
         panelButton.add(button3);
         panelButton.add(button4);

         
         //Listener für Buttons
         addButtonListener(button1);
         addButtonListener(button2);
         addButtonListener(button3);
         addButtonListener(button4);

         //Labels erzeugen
         oben = new JLabel("Flüge verwalten");
       
         //Label zentrieren
         oben.setHorizontalAlignment(JLabel.CENTER); 
         
         //Label dem Panel hinzufügen
         
        
        cNames = new String[]{"Flugnummer","Startzeit","Startbahn","Ankunft"};
        dtm = new DefaultTableModel(data, cNames);
        liste = new JTable(dtm);
        spane = new JScrollPane(liste);
        
         
         //Panels auf Frame packen 
         add(BorderLayout.WEST, panelButton);
         add(BorderLayout.NORTH, oben);
         add(BorderLayout.CENTER, spane);
         
         // Das Fenster wird Sichtbar gemacht
         setVisible(true);
    }

     public static void main(String[] args)
     {
         new Datenbank();
     }

     private void addButtonListener(JButton b)
     {
         b.addActionListener(new ActionListener() 
         { 
	         public void actionPerformed(ActionEvent e) 
	         { 
		         if(e.getSource() == button1)
		         {
			         try
			         {
			        	 	Object[] auswahl = {"Passagierflugzeug", "Frachtflugzeug"};
			        	 	
			        	 	String h = (String) JOptionPane.showInputDialog(null, "Wählen Sie einen Flugzeugtyp:", "Frage",JOptionPane.QUESTION_MESSAGE,null,auswahl,"Passagierflugzeug");
			        	 	String a = JOptionPane.showInputDialog(null, "Geben sie die Flugnummer ein: ", "Eingabeterminal", 3);
			        	 	String d = JOptionPane.showInputDialog(null, "Geben sie die Anzahl der Flugbegleiter ein: ", "Eingabeterminal", 3);
			        	 	
			        	 	if(h.equals("Passagierflugzeug"))
			        	 	{	 		
			        	 		
				                String b = JOptionPane.showInputDialog(null, "Geben sie die Anzahl der Passagiere ein: ", "Eingabeterminal", 3);
				                String c = JOptionPane.showInputDialog(null, "Geben sie die Anzahl der Gesamtplätze ein: ", "Eingabeterminal", 3);
				                
				                			               
				                int w = Integer.parseInt(a);
				                int x = Integer.parseInt(b);
				                int y = Integer.parseInt(c);
				                int z = Integer.parseInt(d);
				                
				                
				                
				                
				                
				                Passagierflugzeug pf = new Passagierflugzeug(w, x, y, z );
				                array.add(pf);
			        	 	}
			        	 	else
			        	 	{
			        	 		 String b = JOptionPane.showInputDialog(null, "Geben sie die Ladung ein: ", "Eingabeterminal", 3);
					             String c = JOptionPane.showInputDialog(null, "Geben sie das Gewicht ein: ", "Eingabeterminal", 3);
					                
					                			               
					             int w = Integer.parseInt(a);
					             int y = Integer.parseInt(c);
					             int z = Integer.parseInt(d);
					                
					             Frachtflugzeug ff = new Frachtflugzeug(b, y, w,z);
					             array.add(ff);
			        	 	}
			        	 
			        	 	
			                
			                
			                
			          }
			          catch (NumberFormatException g)
		              {
		                    System.out.println("Fehler!");
		              } 
			         data = new String[array.size()][4];
			         /*
			         System.out.println("Arraygröße: "+ array.size());
			         System.out.println(array.toString());
			         */
			         for(int i =0; i<array.size(); i++)
			         {
			        	 if(array.get(i) instanceof Passagierflugzeug)
			        	 {
			        		/*
			        		 *  System.out.println(i);
			        		 *  System.out.println("Array:"+ array.get(i));
			        		 */ 
			        		 Passagierflugzeug pf = (Passagierflugzeug) array.get(i);
			        		 data[i][0]= Integer.toString(pf.getGesamtPlaetze());
			        		 data[i][1]= Integer.toString(pf.getPassagierAnzahl());
			        		 data[i][2]= Integer.toString(pf.getBesatzungsAnzahl());
			        		 data[i][3]= Integer.toString(pf.getFlugnummer());
			        		
			        	 }
			        	 else
			        	 {
			        		 Frachtflugzeug ff = (Frachtflugzeug) array.get(i);
			        		 data[i][0]= Integer.toString(ff.getLadegewicht());
			        		 data[i][1]= ff.getFracht();
			        		 data[i][2]= Integer.toString(ff.getBesatzungsAnzahl());
			        		 data[i][3]= Integer.toString(ff.getFlugnummer());
			        	 }
			         }
			         
			         dtm = new DefaultTableModel(data, cNames);
			         liste.setModel(dtm);
			         
			        
			         /*
			         for(int i=0; i<array.size(); i++)
			         {
			        	 for (int k= 0 ;k<4; k++)
			        	 {
			        		 System.out.println(data[i][k]);
			        	 }
			        	 System.out.println("");
			         }
			         dtm.fireTableDataChanged();
			         
			         
			         liste.repaint();
			         liste.revalidate();
			         repaint();
			         revalidate();
			         */
		        }
		        if(e.getSource() == button2)
		        {
		            System.out.println("Button2");
		        }
		         
		        if(e.getSource() == button3)
		        {
		            System.out.println("Button3");
		        }
		         
		        if(e.getSource() == button4)
		        {
		            System.out.println("Button4");
		        }
	          }
         });
         
     }

  /*   private void eingabe(String a)
     {
         anzeige.setText(a);
     }  
  */  
 }

der Code ist jedoch alles andere als übersichtlich und gut strukturiert. Würde lieber einige Dinge in kleineren Methoden auslagern. Hatte jetzt nicht die Zeit den kompletten Source durchzuschauen, funktionieren tuts zumindest jetzt.
 
Ich würde dir raten gleich das Model zu überschreiben. Der Code wird dadurch viel kürzer und logischer, anstatt jedes mal ein neues Model zu erzeugen. Außerdem wird es noch um einizges schwieriger, wenn du im JTable Änderungen vornehmen lassen willst. So dient das Model nur als Schnittstelle zwischen Liste und Tabelle von der direkt gelesen wird.

Java:
import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class TableModelExample {
	private static final String[] TABLE_HEADER_NAMES = {
			"Flugnummer", "Startzeit", "Startbahn", "Ankunft"
	};
	
	private List<Flugzeug> array;
	private JTable liste;
    
    public TableModelExample() {
    	array = new ArrayList<TableModelExample.Flugzeug>();
    	array.add(new Flugzeug(0, "11:00", 1, "19:00"));
    	array.add(new Flugzeug(1, "15:00", 1, "21:00"));
    	
    	
    	JFrame frame = new JFrame();
    	frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    	
    	TableModel model = new DefaultTableModel() {
    		public int getColumnCount() {
    			return(TABLE_HEADER_NAMES.length);
    		}
    		public String getColumnName(int column) {
    			return(TABLE_HEADER_NAMES[column]);
    		}
    		public boolean isCellEditable(int row, int column) {
    			return(false);
    		}
    		public Object getValueAt(int row, int column) {
    			Flugzeug flugzeug = array.get(row);
    			
    			if(column == 0) {
    				return(flugzeug.getFlugnummer());
    			} else if(column == 1) {
    				return(flugzeug.getStartzeit());
    			} if(column == 2) {
    				return(flugzeug.getStartbahn());
    			} if(column == 3) {
    				return(flugzeug.getAnkunft());
    			}
    			return(null);
    		}
    		public int getRowCount() {
    			return(array.size());
    		}
    	};
    	liste = new JTable(model);
    	frame.add(new JScrollPane(liste, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED));
    	
    	frame.pack();
    	frame.setLocationRelativeTo(null);
    	frame.setVisible(true);
	}
    
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				new TableModelExample();				
			}
		});
	}
	
    public class Flugzeug {
    	private int flugnummer;
    	private String startzeit;
    	private int startbahn;
    	private String ankunft;
    	
    	public Flugzeug(int flugnummer, String startzeit, int startbahn, String ankunft) {
			this.flugnummer = flugnummer;
			this.startzeit = startzeit;
			this.startbahn = startbahn;
			this.ankunft = ankunft;
    	}
    	public String getAnkunft() {
			return ankunft;
		}
    	public int getFlugnummer() {
			return flugnummer;
		}
    	public int getStartbahn() {
			return startbahn;
		}
    	public String getStartzeit() {
			return startzeit;
		}
	}
}

Konstrolliere auch bitte folgendes: Variablenamen allgemein, programmieren gegen das Interface und getter/setter statt public variablen.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben