Probleme mit JTableModel

big-mike

Mitglied
Ich habe mir ein eigenes TableModel zusammengebastelt, bzw es versucht, und stoße dabei auf Schwierigkeiten.

Hier mein Model:
Java:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.table.AbstractTableModel;



public class TagKalenderTableModel extends AbstractTableModel{

	private static final long serialVersionUID = 1L;

	Object [][] rowData; 
	Object[] columns ={"Uhr",null};
	
	 public TagKalenderTableModel(Date valueOfCell) {
		 
			String zeilen []= new String[]{"0:00","2:00","4:00","6:00","8:00","10:00","12:00","14:00",
					"16:00","18:00","20:00","22:00","24:00"};
			int i;
			for(i=1;i<13;i++){
				rowData[i][0]=zeilen[i];}
			
			final DateFormat tagesdatum= new SimpleDateFormat ("dd-MMM-yy");
	        final DateFormat wochentag = new SimpleDateFormat("EEEE");
			String cellDatum= tagesdatum.format(valueOfCell);
		    String cellTag= wochentag.format(valueOfCell);	
		    columns[1]=cellDatum;
	}
	
		
	
		@Override
        public Class <?> getColumnClass(int column) {
            return column == 0 ? Date.class : Object.class;
        }
		

		public Object getColumnNames(int column){
			if(0<column&&column<7){
				return columns[column];
			}
			return "Uhr";
				
			}
			
		public int getRowCount() { return 14; }
		public int getColumnCount() { return 2; }
		public Object getValueAt(int row, int col) {
		   			
	       return rowData[row][col];
		    }
		    
		public void setValueAt(Object value, int row, int col) {
		        rowData[row][col] = value;
		        fireTableCellUpdated(row, col);
           }
}

Diese Modell bekommt ein Date -Objekt übergeben, das in der neuen Tabelle den Kopf füllen soll. Außerdem sollte die linke Spalte aus den Uhrzeiten in 2 Stunden abständen bestehen. Also versuche ich hier eine Tagesansicht eines Kalenders zu programmieren. Ich bekomme eine Nullpointer Exception bei dem rowData-Array im Konstruktor. Woran könnte das liegen? Oder ist der Aufbau meines Modells falsch?

Mike
 
Zuletzt bearbeitet:
G

Gast2

Gast
Du musst dein Rowdata Array zuerst anlegen, bevor du darauf zugreifst.

Code:
Object[][] rowData = new Object[42][42];
 

big-mike

Mitglied
oh, war ziemlich dumm von mir, das mir das nicht aufgefallen ist.

Jetz bekomme ich aber einen anderen Fehler, den ich nicht ganz verstehe:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Cannot format given Object as a Date
	at java.text.DateFormat.format(Unknown Source)
	at java.text.Format.format(Unknown Source)
	at javax.swing.JTable$DateRenderer.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.JLayeredPane.paint(Unknown Source)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paintToOffscreen(Unknown Source)
	at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
	at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
	at javax.swing.RepaintManager.paint(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
	at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
	at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
	at java.awt.Container.paint(Unknown Source)
	at java.awt.Window.paint(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.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)
 
G

Gast2

Gast
Naja, du sagst dass deine erste Spalte ein Date Objekt sein soll, daraufhin versucht die JTable die erste Spalte als Date zu rendern.
Bei getValueAt gibst du für die erste Spalte aber ein Object zurück, das kann nicht formatiert werden. Also entweder in der getValueAt die erste Spalte in ein Date-Objekt konvertieren und dann zurückgeben, aber sich von dem Object[][] rowData array verabschieden und ne gescheite datenstruktur nehmen :)
 

big-mike

Mitglied
Also ich will eine Tabelle mit 2 Spalten, mit links Uhr als Kopf und dann Uhrzeiten in Abständen von 2 Stunden und alles außer das Date-Objekt was der Konstruktor übergeben bekommt, hab ich als String versucht. Deswegen müsste das rowData doch eig Objekt sein, damit man sozusagen alles reinschreiben kann!?
Am elegantesten wäre es natürlich die Uhrzeiten auch als Date zu schreiben. Wie mache ich das? Ich werde im Internet nicht fündig wie ich z.Bsp "02:00" als Date speichern kann.
Im Endeffekt bleibt aber wieder der linke Spaltenkopf mit "Uhr" als String übrig, also kann ich doch kein Date-Array anstatt dem rowData nehmen?!

Mike
 
G

Gast2

Gast
Naja, aktuell hast du nen Object[][] array, weil du sagst dass du verschiedene Objekttypen darin speichern willst. Ist richtig, aber nicht wirklich hübsch.

Ich weiß nicht genau ob ich verstanden hab was zu willst. Mir ist nicht klar was jetzt in die zweite Spalte soll. Ich habe jetzt in der zweiten Spalte mal das zugehörige Datum angezeigt.

Java:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

public class TagKalenderTableModel extends AbstractTableModel {

    private Date currentDate;
    private Date[] tableData = new Date[13];

    private String[] header = {"Uhr", "Datum"};

    /** date formatter */
    private final DateFormat dateFormat = new SimpleDateFormat("dd-MMM-yy");
    private final DateFormat timeFormat = new SimpleDateFormat("HH:mm");

    public TagKalenderTableModel(Date currentDate) {
        this.currentDate = currentDate;

        int year = currentDate.getYear();
        int month = currentDate.getMonth();
        int day = currentDate.getDay();
        
        /** erstelle tageszeiten */
        for (int i = 0; i < 13; i++) {
            tableData[i] = new Date(year, month, day, i*2, 0);
        }
    }

    public int getRowCount() {
        return tableData.length;
    }

    @Override
    public String getColumnName(int column) {
        return header[column];
    }

    public int getColumnCount() {
        return 2;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        switch (columnIndex) {
            case 0:
                return timeFormat.format(tableData[rowIndex]);
            case 1:
                return dateFormat.format(tableData[rowIndex]);
            default:
                return null;
        }
    }

    /** öffnet JFrame */
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JTable table = new JTable();
        table.setModel(new TagKalenderTableModel(new Date()));

        frame.add(new JScrollPane(table));
        frame.pack();
        frame.setVisible(true);
    }
}

Du musst nicht zwangsläufig jede Zeile und Spalte im vornherein erstellen und berechnen. Es reicht wenn die getElementAt Methode für die jeweilige Zelle den richtigen Wert zurückgibt. In meinem Model wären jetzt beide Spalten vom Typ String.
 

big-mike

Mitglied
Ich weiß nicht genau ob ich verstanden hab was zu willst. Mir ist nicht klar was jetzt in die zweite Spalte soll. Ich habe jetzt in der zweiten Spalte mal das zugehörige Datum angezeigt

ich möchte im Endeffekt sobald wir mit Datenbanken umgehen lernen in der Schule einen Datensatz Termine einlesen und dann in die Tagesansichten einbauen, da die Tagesansichten beim Klicken auf einen Tag in einer Jahresübersicht aufgehen. Damit wär der Kopf der rechten Spalte das Datum an sich,z.B. "Montag 01.05" und die Spalte gefüllt mit den String-Elementen,sprich der Notiz, meiner eigenen Klasse Termin; aber vorerst leer:

Java:
import java.util.Date;


public class Termin {

	 Date start,ende;
	 String notiz,kurzbeschreibung;
	 
	 
	 public Termin(){
		 
	 }
	 
	 public Termin(Date lstart,Date lende,String lnotiz,String lkurzbeschreibung){
		 
		 this.start=lstart;
		 this.ende=lende;		 	
		 this.notiz=lnotiz;
		 this.kurzbeschreibung=lkurzbeschreibung;
	 }

	
	public Date getStart(){
		return this.start;
	}
	
	public void setStart(Date lstart){
		this.start=lstart;
	}
	
	public Date getEnde(){
		return this.ende;
	}
	
	public void setEnde(Date lende){
		this.ende=lende;
	}
	 
	public String getNotiz(){
		
		return notiz;
	}
	
	public void setNotiz(String lnotiz){
		
		this.notiz=lnotiz;
	}
	
	public String getKurzbeschreibung(){
		
		return this.kurzbeschreibung;
	}
	
	public void setKurzbeschreibung(String lkurzbeschreibung){
		this.kurzbeschreibung=lkurzbeschreibung;
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Eclipse RCP (e4) Anwendung mit JavaFX / e(fx)clipse - Upgrade Probleme AWT, Swing, JavaFX & SWT 2
Juelin Probleme bei Stage.close() AWT, Swing, JavaFX & SWT 23
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
E repaint Probleme AWT, Swing, JavaFX & SWT 13
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
S GridBagLayout - Probleme mit Bilderanzeige AWT, Swing, JavaFX & SWT 3
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
J Probleme mit idividueller Tablecell AWT, Swing, JavaFX & SWT 0
D JavaFX Probleme beim nachtäglichen hinzufügen der jfx dependency AWT, Swing, JavaFX & SWT 7
J Probleme mit InputDialog AWT, Swing, JavaFX & SWT 4
D JavaFX TextArea Probleme bei langen Zeilen AWT, Swing, JavaFX & SWT 1
G JavaFX SplitPane Anwendung - Controller Probleme AWT, Swing, JavaFX & SWT 5
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
B Probleme Action Listener Taschenrechner AWT, Swing, JavaFX & SWT 27
pph080560 JavaFX Probleme mit FX AWT, Swing, JavaFX & SWT 3
M Probleme mit OpenJDK AWT, Swing, JavaFX & SWT 6
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
L JavaFX Probleme beim Installieren JavaFX11 / JavaFX12 -- Eclipse 2019-03 AWT, Swing, JavaFX & SWT 3
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
H JFreeChart - DemoDataSetFactory Probleme AWT, Swing, JavaFX & SWT 1
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
A Probleme mit gridheight (GridBagLayout) AWT, Swing, JavaFX & SWT 6
U Opaque Probleme AWT, Swing, JavaFX & SWT 3
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
F JavaFX Probleme beim automatischen Konvertieren AWT, Swing, JavaFX & SWT 4
S Probleme mit JComboboxen(?) AWT, Swing, JavaFX & SWT 18
S Swing Probleme mit MigLayout AWT, Swing, JavaFX & SWT 2
C Probleme mit createImage AWT, Swing, JavaFX & SWT 1
J Probleme mit contex Menu (javafx) AWT, Swing, JavaFX & SWT 1
J Probleme bei GameofLife AWT, Swing, JavaFX & SWT 24
S JavaFx - Button ActionEvent Probleme AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 0
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 5
J LayoutManager GridBagLayout, probleme mit Anordnung von Objekten AWT, Swing, JavaFX & SWT 6
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
D Swing Probleme mit dem Resizing AWT, Swing, JavaFX & SWT 7
G Probleme mit TextArea AWT, Swing, JavaFX & SWT 5
G JFrame Probleme AWT, Swing, JavaFX & SWT 2
K Probleme beim JPasswordField AWT, Swing, JavaFX & SWT 11
G Cardlayout Refresh Probleme AWT, Swing, JavaFX & SWT 2
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
blazingblade komischerweise probleme mit jtextfield.gettext() AWT, Swing, JavaFX & SWT 9
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
Sin137 LayoutManager GridBagLayout Probleme AWT, Swing, JavaFX & SWT 6
H Netbeans Designer: Probleme mit JPanel und JFrame AWT, Swing, JavaFX & SWT 2
M Swing Probleme mit Frame.pack() AWT, Swing, JavaFX & SWT 1
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
M Swing JProgressbar und Outoputstream probleme AWT, Swing, JavaFX & SWT 2
S Swing Probleme mit transparenz der Hintergrundfarbe und JRadioButtons AWT, Swing, JavaFX & SWT 2
Z Probleme mit JPanel's AWT, Swing, JavaFX & SWT 6
T Probleme mit Anzeige von Elementen im JPanel AWT, Swing, JavaFX & SWT 1
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit JScrollPane AWT, Swing, JavaFX & SWT 6
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
J JavaFX JavaFX Probleme bei der Anzeige von Text AWT, Swing, JavaFX & SWT 18
A Probleme mit TilledBorder("***") AWT, Swing, JavaFX & SWT 4
F Bildschirmschoner Probleme mit Preview AWT, Swing, JavaFX & SWT 8
X Panel Probleme (Tetris) AWT, Swing, JavaFX & SWT 8
N JTable probleme AWT, Swing, JavaFX & SWT 5
B Probleme bei ImageIO.read (?!) AWT, Swing, JavaFX & SWT 9
P JFrame Location-/Size-Probleme AWT, Swing, JavaFX & SWT 5
U LayoutManager Probleme mit Layouts AWT, Swing, JavaFX & SWT 5
C 3 kleine Probleme... AWT, Swing, JavaFX & SWT 13
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
A Probleme mit 2 JFrames in einem Programm AWT, Swing, JavaFX & SWT 7
K LayoutManager Probleme mit 2 Komponenten AWT, Swing, JavaFX & SWT 9
C Probleme mit Buttons und einem ActionListener AWT, Swing, JavaFX & SWT 2
M Probleme mit Verkleinern eines GUI AWT, Swing, JavaFX & SWT 7
B Swing label.setText() macht probleme AWT, Swing, JavaFX & SWT 5
B ImageIcon - Probleme mit dem Dateipfad AWT, Swing, JavaFX & SWT 5
H JTree Probleme AWT, Swing, JavaFX & SWT 9
F Probleme mit (Graphics g) II AWT, Swing, JavaFX & SWT 4
F Probleme mit (Graphics g) AWT, Swing, JavaFX & SWT 3
K 2D-Grafik .GIF macht mir Probleme AWT, Swing, JavaFX & SWT 14
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
T JTable Graphik probleme AWT, Swing, JavaFX & SWT 3
H GridBagLayout macht Probleme... AWT, Swing, JavaFX & SWT 4
vandread Swing Probleme mit jTextField im zusammenspiel mit einem Einblendeffekt (inkl. KSKB) AWT, Swing, JavaFX & SWT 6
S Swing Lauftext Performance Probleme, in größerer Anwendung AWT, Swing, JavaFX & SWT 6
B Infolabel Probleme mit Paint() ? AWT, Swing, JavaFX & SWT 8
P Probleme mit setIconImage AWT, Swing, JavaFX & SWT 8
U Swing Probleme mit Asynchronen Prozessen und Swing: AWT, Swing, JavaFX & SWT 3
das-mo Probleme mit GridBagLayout AWT, Swing, JavaFX & SWT 6
N 2D-Grafik 2 Probleme beim zeichnen AWT, Swing, JavaFX & SWT 18
L Probleme mit JPanel AWT, Swing, JavaFX & SWT 8
D Probleme bei Übertrag von ArrayList in Jtable AWT, Swing, JavaFX & SWT 2
G kleinere Probleme mit GUI AWT, Swing, JavaFX & SWT 2
G Mehrere Probleme mit Java's GUI AWT, Swing, JavaFX & SWT 6
M Swing Erste Schritte mit der GUI, viele Probleme AWT, Swing, JavaFX & SWT 36
J GUI-Aktualisierungs-Probleme AWT, Swing, JavaFX & SWT 4
B Performance-Probleme AWT, Swing, JavaFX & SWT 17

Ähnliche Java Themen

Neue Themen


Oben