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?:oops:

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:
S

SlaterB

Gast
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
 

kleinfritzchen

Aktives Mitglied
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
 

kleinfritzchen

Aktives Mitglied
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
 
S

SlaterB

Gast
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?
 

kleinfritzchen

Aktives Mitglied
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
 
S

SlaterB

Gast
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
 

kleinfritzchen

Aktives Mitglied
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
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Zwei JPanel übereianderlegen AWT, Swing, JavaFX & SWT 14
tommybalbor JavaFx Anwendung klappt nicht für macOs Nutzern, wenn ich zwei dependecies bei maven hinzufüge AWT, Swing, JavaFX & SWT 6
raeuchertofu Input bei zwei jTextfields AWT, Swing, JavaFX & SWT 5
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
U Zwei Fragen zu eienr Swing Aufgabe AWT, Swing, JavaFX & SWT 2
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
P Zwei JTables auf eine A4-Seite mit einstellbaren Rändern AWT, Swing, JavaFX & SWT 9
missy72 JavaFX TableView / TableColumn / ObservableList / zwei Werte in einer Zelle AWT, Swing, JavaFX & SWT 2
Z Swing Kann man denn abstand zwischen zwei Buttons berechnen AWT, Swing, JavaFX & SWT 5
M Kommunikation zwischen zwei Stages AWT, Swing, JavaFX & SWT 0
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
N Wie kann ich zwei Grafiken in einer Oberfläche anzeigen lassen? AWT, Swing, JavaFX & SWT 8
L Wörter zwischen zwei Grenzen einlesen. AWT, Swing, JavaFX & SWT 13
T Java: Zwei abhängige JSlider machen nicht das, was sie sollen AWT, Swing, JavaFX & SWT 4
D Zwei getrennte Java Klassen verbinden. Wie ? AWT, Swing, JavaFX & SWT 2
M Zwei JPanel übereinander nur vorderes "repainten" AWT, Swing, JavaFX & SWT 3
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
H Kombination von zwei Frames AWT, Swing, JavaFX & SWT 16
M Schnittpunkte zwischen zwei Graphics2D Elemente ermitteln. AWT, Swing, JavaFX & SWT 5
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
D Swing Kommunikation zwischen zwei GUI's AWT, Swing, JavaFX & SWT 2
S Zwei JTree, ein Model, bei Selection im ersten JTree soll der zweite die Inhlate anzeigen AWT, Swing, JavaFX & SWT 2
H zwei gleich große Panels getrennt durch ein weiteres Panel AWT, Swing, JavaFX & SWT 10
T CSS Rechtsbüdniges Label mit Zwei Zeilen AWT, Swing, JavaFX & SWT 7
P 2D-Grafik Bogen(Arc) zwischen zwei Punkten zeichnen AWT, Swing, JavaFX & SWT 2
A Oberfläche mit zwei Klassen und actionlistener verbinden AWT, Swing, JavaFX & SWT 7
Paul15 Zwei Fenster AWT, Swing, JavaFX & SWT 23
V JavaFX Zwei Dinge in einer CellFactory erledigen AWT, Swing, JavaFX & SWT 8
B Vertikale Größenänderung zwischen zwei Widgets AWT, Swing, JavaFX & SWT 2
J zwei Paint methoden in einer Klasse AWT, Swing, JavaFX & SWT 3
C Zwei Ebenen in Graphics ? AWT, Swing, JavaFX & SWT 0
L Zwei String Array in eine Spalte einfügen AWT, Swing, JavaFX & SWT 1
I Zwei Fenster nebeneinander anzeigen AWT, Swing, JavaFX & SWT 2
A Swing Zwei Klassen mit Textfeld Eingaben vergleichen und Ausgabe erzeugen AWT, Swing, JavaFX & SWT 10
B Swing focusGained öffnet sich zwei mal AWT, Swing, JavaFX & SWT 3
C Bei Btn Klick zwei JPanels switchen AWT, Swing, JavaFX & SWT 14
A Swing zwei JComboBoxen miteinander vergleichen und anschließend Button umwandeln AWT, Swing, JavaFX & SWT 7
A Jtabbed ein Reiter mit zwei icons AWT, Swing, JavaFX & SWT 4
K Zugriff auf Label und Ereignisbehandlung durch zwei Handlerklassen AWT, Swing, JavaFX & SWT 3
J Zwei GUIs - Nach button-Klick soll ein Wert an die andere GUI übergeben werden AWT, Swing, JavaFX & SWT 15
B Kommunikation zwischen zwei Fenstern und vorübergehende Speicherung der Eingaben AWT, Swing, JavaFX & SWT 4
M Swing Warum öffnen sich beim Zeichnen mit Swing plötzlich zwei Fenster? AWT, Swing, JavaFX & SWT 5
B JApplet zwei Panels autobreite? AWT, Swing, JavaFX & SWT 2
T LayoutManager GridBagLayout - zwei jTable mit unterschiedlicher Höhe AWT, Swing, JavaFX & SWT 2
L Zeichnen in zwei Fenstern AWT, Swing, JavaFX & SWT 8
J JOptionPane mit zwei Buttons?! AWT, Swing, JavaFX & SWT 3
F Swing Ladebildschirm zwischen zwei SWING Frames AWT, Swing, JavaFX & SWT 11
T JTabbedPane - neuen Tab zwischen zwei anderen Tabs hinzufügen AWT, Swing, JavaFX & SWT 2
Helgon Zwei jTables gleich Breit AWT, Swing, JavaFX & SWT 4
C Zwei Bilder übereinander legen AWT, Swing, JavaFX & SWT 1
A Daten umherschieben zwischen zwei Klassen AWT, Swing, JavaFX & SWT 40
M Swing Zwei Jlists - selectedElement binden? AWT, Swing, JavaFX & SWT 7
J Schließen über x soll zwei Prozesse beenden AWT, Swing, JavaFX & SWT 7
F JPanel mit zwei Methoden her beschreiben. AWT, Swing, JavaFX & SWT 8
Y xormode bzw bild in zwei ebenen zeichnen AWT, Swing, JavaFX & SWT 4
G ein JTextArea in zwei JPanels AWT, Swing, JavaFX & SWT 2
G Wie erzeugt man zwei identische JPanel AWT, Swing, JavaFX & SWT 4
C zwei Bilder nacheinander anzeigen AWT, Swing, JavaFX & SWT 2
B LayoutManager Positionierung zwischen zwei Layoutkomponenten AWT, Swing, JavaFX & SWT 2
N Swing DnD zwischen zwei JTrees AWT, Swing, JavaFX & SWT 2
H Swing Zwei Fragen AWT, Swing, JavaFX & SWT 5
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
C Zwei JSpinner mit dem gleichen Wert AWT, Swing, JavaFX & SWT 2
T Zwei Jtables eine JscrollPane AWT, Swing, JavaFX & SWT 3
L Zwei Anwendungen kommen sich in die Quere! AWT, Swing, JavaFX & SWT 4
M SWT DND zwischen zwei TreViewern in beide Richtungen AWT, Swing, JavaFX & SWT 10
S SWT Zwei Tabellen gleichzeitig Scrollen AWT, Swing, JavaFX & SWT 3
N zwei JComponente gleichzeitig auf JPanel hinzufügen AWT, Swing, JavaFX & SWT 22
N Ein Button für zwei Aktionen AWT, Swing, JavaFX & SWT 7
V Swing Auslösen von zwei Events hintereinander AWT, Swing, JavaFX & SWT 4
hdi SWT Zwei mal Shell öffnen = Exception AWT, Swing, JavaFX & SWT 6
algorismi Unterscheiden zwischen zwei JLists AWT, Swing, JavaFX & SWT 5
P GridBagLayout - zwei Spalten mit gleicher Größe AWT, Swing, JavaFX & SWT 11
H Ein Button - zwei Actions AWT, Swing, JavaFX & SWT 3
T Schieberegler mit zwei Schiebern AWT, Swing, JavaFX & SWT 2
M SWT SWT - Zwei Tabellen gleicher Größe AWT, Swing, JavaFX & SWT 5
S import von Klassen (zwei Panels eine Form) AWT, Swing, JavaFX & SWT 39
K Zwei Panels zentriert anordnen AWT, Swing, JavaFX & SWT 3
S Vereinen von zwei MenuBar AWT, Swing, JavaFX & SWT 3
P JList mit zwei Werten AWT, Swing, JavaFX & SWT 9
0 JMenuItem nicht in zwei JMenus möglich? AWT, Swing, JavaFX & SWT 2
G Variblenwert zwischen zwei Klassen übergeben AWT, Swing, JavaFX & SWT 3
B zwei JLabels überlappen lassen AWT, Swing, JavaFX & SWT 5
T Kommunikation zwischen Zwei GUI-Klassen AWT, Swing, JavaFX & SWT 2
O Zwei Listener auf Komponente, warten auf Beendigun? AWT, Swing, JavaFX & SWT 2
T Kommunikation zwischen zwei jFrames AWT, Swing, JavaFX & SWT 4
G Datenaustausch zwischen zwei JFrames AWT, Swing, JavaFX & SWT 3
K Zwei JFrames aneinanderdocken? AWT, Swing, JavaFX & SWT 5
A Eins von zwei offnen Fenster/Frames schließen AWT, Swing, JavaFX & SWT 2
S JTable zwei Text-Zeilen in einer Zelle AWT, Swing, JavaFX & SWT 2
hdi zeitgleiches fokusieren von zwei panels AWT, Swing, JavaFX & SWT 2
I JTable: "GLEICHZEITIG" zwei verschiedene TableMode AWT, Swing, JavaFX & SWT 2
R JDialog dispose() wird zwei mal aufgerufen AWT, Swing, JavaFX & SWT 2
T zwei panel und ein thread AWT, Swing, JavaFX & SWT 5
W Instanz eines Steuerelementes an zwei Stellen zeichnen AWT, Swing, JavaFX & SWT 3
M Zwei JMenuBars AWT, Swing, JavaFX & SWT 5
W JTree - aus zwei mach eins AWT, Swing, JavaFX & SWT 2
M Zwei Element auf ein Contentpane AWT, Swing, JavaFX & SWT 45

Ähnliche Java Themen

Neue Themen


Oben