TabelModel Methoden anwenden

IcocaI

Mitglied
Hi leute,
ich versuche schon die ganze zeit mich mit dem TabelModel zu beschäftigen ... was leider nicht so gut läuft ist, dass ich die Werte in der Tabelle gerne einfügen möchte ... die Tabelle wird schon erzeugt und die Tabelle wird auch angezeigt nur halt die Werte nicht ... man kann doch mit dem TabelModel Werte in einer Tabelle setzen oder nicht?

Code:
package de.core;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;

import de.entitaet.CdsEntitaet;

public class TabModel implements TableModel {
	
	TabModel table;
	CdsEntitaet cd;
		
	public JScrollPane jPaneTable(JPanel jPanel) {				
		JTable table = new JTable(50, 4);
		JScrollPane sPane = new JScrollPane(table);
		sPane.setBounds(270, 100, 700, 400);
		jPanel.add(sPane);
		return sPane;
	}
	
	public void setValueAt(Object value, int rowIndex, int columnIndex) {		
		
	}
	
	public Object getValueAt(int rowIndex, int columnIndex) {

		return null;
	}
	
	public void addTableModelListener(TableModelListener l) {
	}

	public Class<?> getColumnClass(int columnIndex) {

		return null;
	}

	public int getColumnCount() {
		
		return 0;
	}

	public String getColumnName(int columnIndex) {

		return null;
	}

	public int getRowCount() {

		return 0;
	}

	public boolean isCellEditable(int rowIndex, int columnIndex) {

		return false;
	}

	public void removeTableModelListener(TableModelListener l) {
	}
}

Code:
package de.db;

import java.sql.Connection;
import java.util.ArrayList;

import de.core.TabModel;
import de.entitaet.CdsEntitaet;

public class CdsDB {
	
	private ArrayList<CdsEntitaet> listCdsEntitaet = new ArrayList<CdsEntitaet>();
	
	public void getCds(Connection connection){
	
	}
	
	public void auslesenAusArrayList(TabModel table){
		
		String spalten[] = {"ID", "Interpret", "Titel", "Jahr"};
		
		CdsEntitaet cd = new CdsEntitaet();
		cd.setId(1);
		cd.setInterpret("Incubus");
		cd.setTitel("Are You In?");
		cd.setJahr(2000);
		
		listCdsEntitaet.add(cd);
		}
}

Code:
package de.entitaet;


public class CdsEntitaet {

	private String titel;
	private String interpret;
	private int jahr;
	private int id;

	public void setId(int id) {
		this.id = id;
	}

	public String getTitel(){
		return this.titel;
	}
	
	public void setTitel(String titel){
		this.titel = titel;
	}
	
	public String getInterpret(){
		return this.interpret;
	}
	
	public void setInterpret(String interpret){
		this.interpret = interpret;
	}
	
	public int getJahr(){
		return this.jahr;
	}
	
	public void setJahr(int jahr){
		this.jahr = jahr;
	}
	
	public int getID(){
		return this.id;
	}
	
}

das ist erstmal alles ein test damit ich ungefähr weiß wie ich das ganze mit ner DB das realisieren kann
 
Wo liegt jetzt genau dein Problem?

Zudem verwirrt mich diene erste Klasse. Wieso implementierst du das TableModel?
Wenn du ein eigenes Model schrieben möchtest solltest due deine Klasse vom AbstractTableModel erben lassen. Zudem versteh ich auch nicht was die erste Methode machen soll. Sie legt ein JTable an und benutzt dafür das DefaultTablemodel, do wozu dann dein eigenes Model?
 
Wo liegt jetzt genau dein Problem?
Also erstmal zu der Struktur ... ich wollte das MVC-Konzept anwenden. leider ist das noch nicht ganz ausgereift. Ich hab nen Controller der alles kontrolliert, dann eine view, wo die ganze ansicht erstellt wird und einen model was momentan das TabModel ist ... ich denke man kann mehrere Models für verschiedene sachen erstellen ... ich hab ein kleines bild drangesetzt wie momentan meine struktur aufgebaut ist ...

im package de.entitaet sind die attribute von der Datenbank enthalten und halt mit get-/setter generiert ...

in de.db ist einmal die Verbindung.java zur Datenbank gespeichert (was momentan noch nicht genutzt wird) und die CdsDB.java da sollte eigentlich die sql statements stehen aber zur testzwecken sind da erstmal nur was manuel eingefügtes drinne.

in de.core ist der Controller der alles kontrollieren soll, die View für die ansicht und das TabModel für das eigentliche model... jo und deshalb bin ich auf die idee gekommen , hey wieso nicht die methoden von tablemodel verwenden... wieso auch nicht müsste doch gehen oder irre ich mich da?

Zudem verwirrt mich diene erste Klasse. Wieso implementierst du das TableModel?
weil ich dachte das würde mir ne menge an arbeit ersparen die ganzen methoden neu zu schreiben ...

Wenn du ein eigenes Model schrieben möchtest solltest due deine Klasse vom AbstractTableModel erben lassen.
wieso abstracttablemodel? meinst du das würde reichen weil die schon die wichtigsten methoden besitzen?

Zudem versteh ich auch nicht was die erste Methode machen soll. Sie legt ein JTable an und benutzt dafür das DefaultTablemodel, do wozu dann dein eigenes Model?
wo setzte ich den ein DefaultTableModel ein?


ein weiteres problem ergibt sich dann noch wenn alles dann die richtige form hat, dass ich die daten in die tabelle nicht setzen kann zumindest hab ichs nicht geschafft nur halt mit normalen array die ich dem konstruktor von JTable übergeben habe ....
 

Anhänge

  • test.JPG
    test.JPG
    14,6 KB · Aufrufe: 24
weil ich dachte das würde mir ne menge an arbeit ersparen die ganzen methoden neu zu schreiben ...
Arbeit ersparen ist ja ganz gut, aber du solltest auch dann nur die Methoden überschrieben, die die wirklich brauchst/verändern willst.

wieso abstracttablemodel? meinst du das würde reichen weil die schon die wichtigsten methoden besitzen?

Weil das alle Methoden liefert wie das TableModel-Interaface inklusive den wichtigsten Implementierungen (du hats einen gewissen Grundbaustein und musst nicht komplett von null anfangen, siehe auch Absatz drüber).

wo setzte ich den ein DefaultTableModel ein?

Genau hier: JTable table = new JTable(50, 4);

ein weiteres problem ergibt sich dann noch wenn alles dann die richtige form hat, dass ich die daten in die tabelle nicht setzen kann zumindest hab ichs nicht geschafft nur halt mit normalen array die ich dem konstruktor von JTable übergeben habe ....

An welcher Stelle übergibst du denn das Array? Ich seh das nirgends in dem Code, den du gepostet hast. Auch sehe ich, dass du die setValue()-Methode nicht mit Logik gefüllt hast um überhaupt Daten in die Tabelle zu schreiben.
 
Genau hier: JTable table = new JTable(50, 4);
ah ok aber wäre es nicht ein default wenn da keine werte mit überliefert werden?


An welcher Stelle übergibst du denn das Array? Ich seh das nirgends in dem Code, den du gepostet hast. Auch sehe ich, dass du die setValue()-Methode nicht mit Logik gefüllt hast um überhaupt Daten in die Tabelle zu schreiben.

kk... hab den code da rausgenommen und vergessen ihn da wieder einzusetzen ... ich werd erstmal die struktur ändern dann das nächste ^^ muss aber jetzt momentan ca. 15 kataloge durchgucken nur um die zusatzleistungen rauszusuchen :mad: und aufzuschreiben
 
ah ok aber wäre es nicht ein default wenn da keine werte mit überliefert werden?

Wir reden von einem DefaultTableModel. Ein JTable und ein TableModel sind nicht das gleiche. Jede JTable besitzt ein TableModel, welches die Arbeit in Bezug auf Daten übernimmt. Wenn du eine Zeile (Daten) hinzufügst, übergibst du die Zeile dem TableModel.

Wenn du ein JTable mit dem default Konstruktor erstellst (das was du meinst) dann wird ein "leeres" DefaultTableModel angelegt. Das DefaulTableModel wird aber immer automatisch angelegt, solange du Java nicht sagst ein anderes zu verwenden.
 
Zurück