zwei TableModel

kleinfritzchen

Aktives Mitglied
Hallo,
ich habe folgendes prolem:
ich habe in einer GUI eine ReiterPane auf der ein Reiter Eingabe und ein Reiter Auswertung ist.
Ich habe nun ein paar Datensätze über ein TabelModel und eine Generische Klasse generiert.
Im TabelModel der Eingabe wird ein Objekt der Klasse AuswertModel erzeugt was mir ermöglicht auf das Model der Auswertung (auch ein JTable in JScollPane) zuzugreifen und die erhaltenen daten auch an dieses weiterzuleiten. Im AuswertModel sollen die Daten auf gleichheit geprüft werden (eas auch funktioniert) und in die aListe hinzugefügt werden oder wenn zwei Objekte gleich sind werden einzelne werte addiert.-----soweit sogut....
das problem ist jetzt das die daten der aListe aus irgendeinem Grund nicht auf dem Auswertungs Reiter in der tabelle erscheinen sondern die Zeilen in der Eingabe Tabelle überschreiben.

Kann mir da jemand mal bei der Fehlersuche helfen?😳

MfG Fritz

hier mal die Dateien:
GUI
Java:
package Pack;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.FocusTraversalPolicy;
import java.awt.GridLayout;
import java.awt.ScrollPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;

public class GUI_Inv extends JFrame {

	// Elemente
	JTabbedPane reiterPane = new JTabbedPane();
	JPanel eingabe, auswertung, optionen, fussZeile, leftPane, auswertLeftPane,
			addPane, lftPaneOptionen, pnlMitteArt2;

	// addPane
	JComboBox jBox;
	JTextField textFeld1, textFeld2, artikelPfad, inventurPfad;
	JButton btnSpeichern, btnLoeschen, btnDrucken, btnAddArtikelPfad,
			btnAddInventurPfad;
	JRadioButton rb1, rb2;
	ButtonGroup btnGruppe;

	JLabel label1, label2, labl3, label4;
	JLabel labArtikel, labTextFeld1, labTextFeld2, labArtInfo;

	// leftPane
	JTextArea infoText;

	JScrollPane liste, auswertListe;
	JTable dTabelle,aTabelle;
	AuswertModel aModel;
	InvDatenModel datModel;
	
	private static int MAXINV, MAXART;

	// Konstruktor
	public GUI_Inv(String titel) {
		super(titel);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		erstelleKomponente();
		addKomponente();
		pack();
	}

	private void erstelleKomponente() {
		reiterPane = new JTabbedPane(); // GrundFrame mit Reitern
		eingabe = new JPanel();
		eingabe.setLayout(new BorderLayout());

		addPane = new JPanel();
		addPane.setLayout(new GridLayout(0, 2, 5, 5));
		addPane.setAlignmentX(LEFT_ALIGNMENT);
		labArtikel = new JLabel("Artikel Nr");
		addPane.add(labArtikel);
		jBox = new JComboBox();
		jBox.setPrototypeDisplayValue(textFeld1);
		addPane.add(jBox);
		labTextFeld1 = new JLabel("\u00d8 1 [mm] ", JLabel.RIGHT);
		addPane.add(labTextFeld1);
		textFeld1 = new JTextField(14);
		textFeld1.setDocument(createNumericDocumentWithMaxLength(4));
		textFeld1.setHorizontalAlignment(JTextField.RIGHT);
		addPane.add(textFeld1);
		labTextFeld2 = new JLabel("\u00d8 2 [mm] ", JLabel.RIGHT);
		addPane.add(labTextFeld2);
		textFeld2 = new JTextField();
		textFeld2.setDocument(createNumericDocumentWithMaxLength(4));
		textFeld2.setHorizontalAlignment(JTextField.RIGHT);
		addPane.add(textFeld2);
		addPane.add(Box.createHorizontalGlue());
		btnSpeichern = new JButton("Speichern");
		btnSpeichern.addActionListener(new buttonHorcher());
		addPane.add(btnSpeichern);
		rb1 = new JRadioButton("Inventur-D");
		rb2 = new JRadioButton("Artikel-D");
		btnGruppe = new ButtonGroup();
		rb1.setSelected(true);
		btnGruppe.add(rb1);
		btnGruppe.add(rb2);
		addPane.add(rb1);
		addPane.add(rb2);
		addPane.setMaximumSize(addPane.getPreferredSize());

		infoText = new JTextArea();
		infoText.setEditable(false);
		infoText.setLineWrap(true);
		infoText.setWrapStyleWord(true);
		infoText.setAlignmentX(LEFT_ALIGNMENT);
		infoText.setFocusTraversalKeysEnabled(false);

		leftPane = new JPanel();
		leftPane.setLayout(new BoxLayout(leftPane, BoxLayout.Y_AXIS));
		leftPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 4, 4));
		leftPane.add(addPane);
		leftPane.add(infoText);

		fussZeile = new JPanel();
		fussZeile.setLayout(new FlowLayout(FlowLayout.LEFT));

		aModel=new AuswertModel();
			auswertung = new JPanel();
			auswertung.setLayout(new BorderLayout());
			aTabelle=new JTable(aModel);
			auswertListe = new JScrollPane(aTabelle);
			auswertLeftPane = new JPanel();
		btnLoeschen = new JButton("Löschen");
		btnDrucken = new JButton("Drucken...");
		btnDrucken.addActionListener(new buttonHorcher());
			auswertLeftPane.add(btnDrucken);

		
		File f=new File(getOption("InventurPfad"));
		System.out.println(f);
		datModel=new InvDatenModel(f);
		dTabelle =new JTable(datModel);
		liste = new JScrollPane(dTabelle);
		

		optionen = new JPanel();
		optionen.setLayout(new BorderLayout());
		optionen.setBorder(BorderFactory.createEmptyBorder(10, 5, 5, 10));
		Box boxLinks = Box.createVerticalBox();
		// boxLinks.add(BorderFactory.createEmptyBorder(0, 0, 0, 5));
		label1 = new JLabel("Artikel Pfad");
		label1.setAlignmentX(RIGHT_ALIGNMENT);
		label1.setAlignmentY(CENTER_ALIGNMENT);

		label2 = new JLabel("Inventur Pfad");
		label2.setAlignmentX(RIGHT_ALIGNMENT);
		label2.setAlignmentY(CENTER_ALIGNMENT);
		boxLinks.add(label1);

		boxLinks.add(Box.createVerticalStrut(15));
		boxLinks.add(label2);
		optionen.add(boxLinks, BorderLayout.WEST);
		Box boxMitte = Box.createVerticalBox();
		// pnlMitteArt2=new JPanel();
		// pnlMitteArt2.setLayout(new
		// BoxLayout(pnlMitteArt2,BoxLayout.LINE_AXIS));
		artikelPfad = new JTextField(30);
		artikelPfad.setAlignmentX(LEFT_ALIGNMENT);
		artikelPfad.setMaximumSize(artikelPfad.getPreferredSize());
		inventurPfad = new JTextField(30);
		inventurPfad.setAlignmentX(LEFT_ALIGNMENT);
		inventurPfad.setMaximumSize(inventurPfad.getPreferredSize());
		boxMitte.add(artikelPfad);
		boxMitte.add(Box.createVerticalStrut(5));
		boxMitte.add(inventurPfad);
		optionen.add(boxMitte, BorderLayout.CENTER);
		Box boxRechts = Box.createVerticalBox();
		btnAddArtikelPfad = new JButton("...");
		btnAddArtikelPfad.addActionListener(new buttonHorcher());
		btnAddInventurPfad = new JButton("...");
		btnAddInventurPfad.addActionListener(new buttonHorcher());
		boxRechts.add(btnAddArtikelPfad);
		boxRechts.add(btnAddInventurPfad);
		btnAddArtikelPfad.setAlignmentX(LEFT_ALIGNMENT);
		btnAddInventurPfad.setAlignmentX(LEFT_ALIGNMENT);
		optionen.add(boxRechts, BorderLayout.LINE_END);
		FocusTraversalPolicy policy = MyFocusTraversalPolicy
		.getFocusTraversal(new JComponent[] { jBox, textFeld1,
				textFeld2, btnSpeichern });
		setFocusTraversalPolicy(policy);
		setFocusCycleRoot(true);

	}

	private void addKomponente() {
		getContentPane().add(reiterPane);
		reiterPane.addTab("Eingabe", eingabe);
		reiterPane.addTab("Auswertung", auswertung);
		reiterPane.addTab("Optionen", optionen);

		eingabe.add(leftPane, BorderLayout.WEST);
		eingabe.add(liste, BorderLayout.CENTER);
		eingabe.add(fussZeile, BorderLayout.LINE_END);

		auswertung.add(auswertListe, BorderLayout.CENTER);
		auswertung.add(auswertLeftPane, BorderLayout.WEST);

		leseDateien();
	}

	private void leseDateien() {
		// setOption("MAXART",(""+200));
		// setOption("MAXINV",""+1000);
		File fl = new File(getOption("ArtikelPfad"));
		if (!fl.canRead()) {
			JOptionPane
					.showMessageDialog(
							optionen,
							"Die Artikeldatei kann nicht gelesen werden, bitte eine gültige \"Artikel.txt\" einstellen",
							"ungültige Datei", JOptionPane.WARNING_MESSAGE);
		}
		if (!fl.canWrite()) {
			JOptionPane
					.showMessageDialog(
							optionen,
							"Die Artikeldatei kann nicht verändert werden wegen fehlender Schreibrechte!",
							"Warnung keine ausreichenden Zugriffsrechte",
							JOptionPane.WARNING_MESSAGE);
		}
		artikelPfad.setText(getOption("ArtikelPfad"));
		inventurPfad.setText(getOption("InventurPfad"));

		try {
			FileReader fr = new FileReader(fl.getAbsoluteFile());
			BufferedReader br = new BufferedReader(fr);
			String z = br.readLine();
			while ((z = br.readLine()) != null) {
				// System.out.println(z);
				String[] zz = z.split(";");
				jBox.addItem(zz[0]);
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			System.out
					.println("Ein Ausgabefehller beim Initialisieren der Artikel Datei");
		}
		// JOptionPane invDialog=new JOptionPane();
		int ant = JOptionPane
				.showConfirmDialog(
						null,
						"Neue Inventur-Datei erstellen?\nBei Nein wird die zuletzt geöffnete Datei geladen.",
						"Inventur Datei", JOptionPane.YES_NO_OPTION);
		if (ant == 0) {
			System.out.println("ja wurde gedrückt");
			File pfad = new File(getOption("InventurPfad"));
			JFileChooser flc = new JFileChooser(pfad);
			FileNameExtensionFilter filter = new FileNameExtensionFilter(
					"Invenur Datei ", "csv");
			flc.setFileFilter(filter);
			int returnVal = flc.showSaveDialog(eingabe);

			if (returnVal == JFileChooser.APPROVE_OPTION) {
				File file = flc.getSelectedFile();
				System.out.println(flc.getSelectedFile().toString());
				// This is where a real application would save the file.
				setOption("InventurPfad", (file.toString() + ".csv"));
				inventurPfad.setText(getOption("InventurPfad"));
				try {
					FileWriter fr = new FileWriter(file + ".csv");
					fr.write("Art Nr.;Einheit;D 1;d 2;Meter;Datum");
					fr.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			} else {
				System.out.println("Abbruch durch benutzer");
			}

		}
		if (ant == 1) {
			System.out.println("nein wurde gedrückt");
		}
	}

	class buttonHorcher implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent arg0) {
			if (arg0.getSource() == btnAddArtikelPfad) {
				System.out.println("Artikelpfad gedrückt");
				artikelPfadDialog();
				jBox.removeAllItems();
				leseDateien();
			}
			if (arg0.getSource() == btnAddInventurPfad) {
				System.out.println("Inventurpfad + gedrückt");
				inventurPfadDialog();
				leseDateien();
			}
			
			if(arg0.getSource() ==btnSpeichern){
				InventurDaten x=new InventurDaten("Artikel 5","m",0f,0f,10f,"datum");
				datModel.addD(x);
				System.out.println("Speichern wurde gedrückt");
				System.out.println(datModel.dl.getElementCount());
			}
			
			if (arg0.getSource() ==btnDrucken){
				InventurDaten x=new InventurDaten("Artikel 5","m",0f,0f,10f,"datum");
				datModel.addD(x);
				System.out.println("drucken wurde gedrückt");
				System.out.println(datModel.dl.getElementCount());
			}

		}
	}

	public void artikelPfadDialog() {
		FileNameExtensionFilter filter = new FileNameExtensionFilter(
				"Artikrl Datei", "txt", "csv");
		JFileChooser fc = new JFileChooser(getOption("ArtikelPfad"));
		fc.setFileFilter(filter);
		int returnVal = fc.showOpenDialog(optionen);
		File file = null;
		if (returnVal == JFileChooser.APPROVE_OPTION) {
			file = (fc.getSelectedFile());
			// This is where a real application would open the file.

			setOption("ArtikelPfad", file.getAbsoluteFile().toString());
		} else {
			artikelPfad.setText(getOption("ArtikelPfad"));
		}
		// return file;
	}

	public void inventurPfadDialog() {
		FileNameExtensionFilter filter = new FileNameExtensionFilter(
				"Inventur Datei", "csv");
		System.out.println("bin da");
		JFileChooser fc = new JFileChooser();
		fc.setFileFilter(filter);
		int returnVal = fc.showOpenDialog(optionen);

		if (returnVal == JFileChooser.APPROVE_OPTION) {
			File file = fc.getSelectedFile();
			// This is where a real application would open the file.
			inventurPfad.setText(file.getAbsolutePath());
			setOption("InventurPfad", inventurPfad.getText());
		} else {
			inventurPfad.setText(getOption("InventurPfad"));
		}
	}

	/*
	 * Properties einstellungen sichern und lesen
	 */
	public static String getOption(String variable) {
		try {
			Properties props = new Properties();
			File ini = new File("Inventur.ini");
			props.load(new FileInputStream(ini));
			return (props.getProperty(variable));

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

	public static void setOption(String variable, String wert) {
		try {
			Properties props = new Properties();
			File ini = new File("Inventur.ini");
			props.load(new FileInputStream(ini));
			// System.out.println(props.getProperty("ARBEITER"));
			// Und jetzt die Werte?
			props.setProperty(variable, wert);

			// Und sichern
			props.store(new FileOutputStream(ini), variable);

			// System.out.println(props.getProperty("ARBEITER"));
		} catch (Exception e) {
			System.out.println("Wert-Schlüssel schreiben nicht möglich");
		}

	}
	private Document createNumericDocumentWithMaxLength(final int maxLength) {

		Document doc = new PlainDocument() {
			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;

			@Override
			public void insertString(int offs, String str, AttributeSet a)
					throws BadLocationException {
				if (getLength() + str.length() > maxLength)
					return;
				if (!str.matches("^[\\d]*$"))
					return;

				super.insertString(offs, str, a);
			}
		};
		return doc;

	}

	public static void main(String[] args)
			throws UnsupportedLookAndFeelException {
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		GUI_Inv fenster = new GUI_Inv("TITEL");
		// fenster.setSize(640, 400);
		fenster.setLocationRelativeTo(null);
		System.out.println("test");
		// setOption("ITHEM_1","1574027070356");

		fenster.setVisible(true);

	}
}

Model der Eingabe:
Java:
package Pack;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;

public class InvDatenModel implements TableModel{
	DatenListe<InventurDaten> dl=new DatenListe<InventurDaten>(1000);
//	File dateiName = new File("y:\\Java von eee\\InventurDaten082011.csv");
//	BufferedReader br;
//	String[] z1;
//	String z;
	int x, y;
	float zz;
	private File dateiName;
	private List<TableModelListener> tableListener = new ArrayList<TableModelListener>();;
	// Auswertungs Bereich
	//DatenListe<InventurDaten> auswertung=new DatenListe<InventurDaten>(1000);
	AuswertModel a=new AuswertModel();
	//Konstruktor
	InvDatenModel(File dateiNamee){
		this.dateiName=dateiNamee;
		System.out.println(dateiName);
		datenLaden();
	}
	//Instanzvariablen
	String[][] daten=new String[500][6];
	InventurDaten satz;
	int anzZeilen, spalten;
	BufferedReader br;
	String z;
	String[] z1;
	
	// Datei auswerten
	public void datenLaden()
	{
		System.out.println("bin da");
		// System.out.println(!(dateiName.exists()));
		if (!(dateiName.exists())){
			System.out.println("Dateipfad falsch");
		}
		System.out.println("Datei ok");
		try {
			
			FileReader fr = new FileReader(dateiName);
			br = new BufferedReader(fr);
			z=br.readLine();
			while ((z = br.readLine()) != null) {
				z1 = z.split(";");
				
				System.out.println(z);
				//System.out.println(InventurDaten.getAnzDaten());
				satz=new InventurDaten(
						z1[0],
						z1[1],
						Float.parseFloat(z1[2]),
						Float.parseFloat(z1[3]),
						Float.parseFloat(z1[4]),
						z1[5]);
				System.out.println(z1[0]);
				System.out.println(satz.artNr+"\t"+satz.f1+"\t"+satz.f2+"\t"+satz.datum);
				addD(satz);
//				for (int j = 0; j < z1.length; j++) {
//					daten[anzZeilen][j] = z1[j];
//					satz=
//				}
				anzZeilen++;
				//z = br.readLine();
				//System.out.println(z);
			}
			spalten=z1.length;
		} catch (FileNotFoundException e) {
			System.out.println("Datei nicht gefunden");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("Ein Ausgabe fehler");
			e.printStackTrace();
		}
		

	}
	
	public void anzz() throws IOException{
		while((z=br.readLine())!=null){
			anzZeilen +=1;
		}
	}
	
  	public void addD(InventurDaten f) {
		dl.add(f);
		System.out.println(dl.get(dl.getElementCount()-1).f3);
		a.addAuswertung(f);
		//testausgabe();
		for (TableModelListener l : tableListener) {
			l.tableChanged(new TableModelEvent(this));
		}
	}


	@Override
	public void addTableModelListener(TableModelListener l) {
		tableListener.add(l);
		
	}

	@Override
	public Class<?> getColumnClass(int columnIndex) {
		switch (columnIndex){
		case 0:return String.class;
		case 1:return String.class;
		case 2:return Float.class;
		case 3:return Float.class;
		case 4:return Float.class;
		case 5:return String.class;
		default: return null;
		}
	}

	@Override
	public int getColumnCount() {
		return 6;
	}

	@Override
	public String getColumnName(int columnIndex) {
		switch (columnIndex){
		case 0:return "Artikel Nr";
		case 1:return "Einheit";
		case 2:return "A-\u00d8[mm] / [m]";
		case 3:return "I-\u00d8[mm] / [Kg]";
		case 4:return "Meter";
		case 5:return "Datum";
		default: return null;
		}
	}

	@Override
	public int getRowCount() {
		
		return dl.getElementCount();
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		// TODO Auto-generated method stub
		switch (columnIndex){
			case 0:return dl.get(rowIndex).artNr;
			case 1:return dl.get(rowIndex).einheit;
			case 2:return dl.get(rowIndex).f1;
			case 3:return dl.get(rowIndex).f2;
			case 4:return dl.get(rowIndex).f3;
			case 5:return dl.get(rowIndex).zusText;
			default: return null;
		}
		
		
	}

	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void removeTableModelListener(TableModelListener l) {
		tableListener.remove(l);
		
	}

	@Override
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		// TODO Auto-generated method stub
		
	}

	

	
}

Model der Auswertung:
Java:
package Pack;

import java.util.ArrayList;
import java.util.List;

import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;

public class AuswertModel implements TableModel{

	private List<TableModelListener> auswListener = new ArrayList<TableModelListener>();;	
	//Konstruktor
	//}
	// Auswertungs Bereich
	DatenListe<InventurDaten> aListe=new DatenListe<InventurDaten>(1000);
	
	public void addAuswertung(InventurDaten f) {
		// System.out.println(auswertung.getElementCount());
		int zzz=aListe.getElementCount();
		System.out.println("auswerten Zähler :"+zzz);
		for (int i = 0; i < zzz; i++) {
			//System.out.println(i);
			if (aListe.get(i).artNr.equals(f.artNr)) {
				aListe.get(i).setM(aListe.get(i).f3 + f.f3);
				
				System.out.println("addiert zu Element :"+i );
				return;
				}
		} 
		for (TableModelListener l : auswListener) {
			l.tableChanged(new TableModelEvent(this));
		}
		aListe.add(f);
		System.out.println("aListe Element :"+aListe.getElementCount());
		
	}
	@Override
	public void addTableModelListener(TableModelListener l) {
		auswListener.add(l);
		
	}

	@Override
	public Class<?> getColumnClass(int columnIndex) {
		switch(columnIndex){
		case 0:return String.class;
		case 1:return String.class;
		case 2:return Float.class;
		default: return null;
		}
	}

	@Override
	public int getColumnCount() {
		return 3;
	}

	@Override
	public String getColumnName(int columnIndex) {
		switch (columnIndex){
		case 0:return "Artikel Nr.";
		case 1:return "Einheit";
		case 2:return "Meter";
		default: return null;
		}
		
	}

	@Override
	public int getRowCount() {
		// TODO Auto-generated method stub
		return aListe.getElementCount();
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		switch(rowIndex){
		case 0:return aListe.get(columnIndex).artNr;
		case 1:return aListe.get(columnIndex).einheit;
		case 2:return aListe.get(columnIndex).f3;
		default :return null;
		}
		
	}

	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void removeTableModelListener(TableModelListener l) {
		auswListener.remove(l);
		
	}

	@Override
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		// TODO Auto-generated method stub
		
	}

}

generische Liste:
Java:
package Pack;


public class DatenListe<T> {

	private T[] array;
	private int nextFreeSlot=0;
	
	public DatenListe(int groese){
		array =(T[]) new Object[groese];
	}
	
	public void add(T o){
		if (nextFreeSlot==array.length){
			throw new IllegalStateException("Liste ist voll!");
		}
		array[nextFreeSlot]=o;
		//System.out.println(o);
		nextFreeSlot++;
		
	}
	
	public T get(int index){
		return array[index];
	}
	
	public int getGroese(){
		return array.length;
	}
	
	public int getElementCount(){
		return nextFreeSlot;
	}
}
 
Zuletzt bearbeitet von einem Moderator:
wenn du ein zweites AuswertModel-Objekt erstellst, dann wirken sich Änderungen dort natürlich nicht auf das in der GUI verwendete Model aModel aus,
übergib dieses als Parameter an das InvDatenModel,

die getValueAt()-Methode in AuswertModel ist übrigens ziemlich verkorkst, row und column sind vertauscht
 
Hallo,
ich hab jetzt das aModel aus der GUI an das InventurModel weitergereicht was dann dort das AuswertModel darstellt. dies hat zu einem Fehler während der Laufzeit beim aufruf des Reiters "Auswertung" geführt.
Mein Konzeptwar eigentlich in der Gui nur das bearbeiten der Daten zu machen sowie die Dateipfade und Dateien zur verfügung zu stellen. Die eigentlichen Daten sollen dann imModel ausgelesen, in einer Liste dem TabelModel zur verfügung gestellt werden. Auch die Speicherung der Daten sollim Model später durchgeführt werden.
Mein verdacht ist das das aModel durch die weitergabe an das InventurModel die Probleme verursacht. Ich könnte ja sagen das ich die beiden Models vollständig trenne aber das würde den aufwand beim löschen oder bearbeiten erhöhen.

Die Fehler die jetzt auftreten sind anscheinend teilweise auf Fehler in dern Datenstruktur zurückzuführen.
Ich poste gleich noch die fehler.

MfG Fritz
 
Hier die Fehler:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Cannot format given Object as a Number
at java.text.DecimalFormat.format(Unknown Source)
at java.text.Format.format(Unknown Source)
at javax.swing.JTable$DoubleRenderer.setValue(Unknown Source)
at javax.swing.table.DefaultTableCellRenderer.getTableCellRendererComponent(Unknown Source)
at javax.swing.JTable.prepareRenderer(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source)
at javax.swing.plaf.ComponentUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JViewport.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.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)


MfG Fritz
 
ohne Code ist nicht viel zu sagen, aber bisschen doch schon:

ein Eintrag soll auf Zahl formatiert werden was nicht klappt,
sofern du nicht schnell einen Durchblick hast, welche Daten gemeint sind, stelle alle Spalten aller Model auf Object.class um,
müsste wieder laufen? die Anzeige in der GUI könnte dann schon Hinweise geben, was steht an falscher Stelle?

ansonsten weiter:
und dann eine Spalte nach der anderen wieder nach Float.class und was du da so hast umstellen,
-> welche Tabelle, welches Model, welche Spalte ist es?
außerdem logge in getValueAt() im betroffenen Model, was du für die zugehörige Spaltennummer an Werten zurückgibst,
die letzten Ausgaben vor der Exception dürften die interessanten sein,

ich hatte ja schon geschrieben dass die bisherige getValueAt()-Methode schlecht ist, hast du die korrigiert?
 
Hallo,
ja die getValueAt() im AuswertModel ist korregiert.
was soll ich den auf Objekt ändern? Die Inhalte der Objekte (Instanzvariablen der Artikel Klasse)? oder nur im Table Model die angabe der Klassen in getColumnClass() ?
Ich muss jetzt erst mal essen und dann in die Spätschicht, ich kümmere mich dann heut Nacht um die Umsetzung....

MfG Fritz
 
wenn getColumnClass() von Float spricht, dann wird der getValueAt()-Rückgabewert in der Spalte als Float behandelt
im Model noch nicht, das gibt ja Object zurück, aber später dann,

diese beiden Dinge müssen also zusammenpassen, was zu ändern ist ist müßig zu sagen, es gehen verschiedene Richtungen
 
Hallo,
Ich hab erst mal ein paar kleinere Fehler beseitigt und jetzt funktioniert es zum größten Teil.
Danke für den Tip mit dem Objekt, das hat mich ein ganzes Stück weiter gebracht.
Für mich ist es erst mal wichtig das ich lerne wie man Fehler findet denn ganz vermeiden werd ich sie wohl nicht.
Im Moment macht die Auswertung noch bei den ausgelesenen Datensätzen mist weil gleiche Datensätze mehrfach in der Auswertliste stehen. Das passiert aber nicht wenn ich über den Speichern Button ein Objekt hinzufüge, da wird dann nur die Gesamtsumme in der Auswertung angezeigt.
Aber den Fehler find ich auch noch! (Wird wohl an der logik liegen)

MfG Fritz
 

Zurück
Oben