jtable renderer und sortieren kombinieren

hi, ich bin fast fertig mit meinem Programm, nachdem ich vor knapp einem Monat mit dem java programmieren angefangen habe. :D
Allerdings habe ich noch ein Problem zwei Sachen unter ein Dach zu bekommen.
Einerseits färbe ich momentan Zeilen ein, die ein bestimmtes Datum unter/überschritten haben.
Andererseits möchte ich das normale Sortieren unterstützen, das man zB aus excel kennt.
Beides funktioniert einzeln soweit ganz gut, allerdings nicht, wenn man beides zusammen benutzen möchte.
Sind z.B. Zeile 0, und 2 grün, wenn ich dann sortiere sind immer noch Zeile 0 und 2 grün,
der Inhalt wurde aber umsortiert, was so nicht sein sollte.
Mir ist natürlich klar, das es genauso funktioniert, wie mein code es vorgibt, ich weiß aber momentan einfach nicht, wie ich es "richtig" hinbekomme, das beim sortieren auch die row color mitsortiert wird.

Einen beispiel code, gibt es im nächsten post.
Ich habe zwar schon ziehmlich viel gekürzt, komme aber immer noch über die 25.000 Zeichen Grenze. Ich hoffe die mods nehmen mir das nicht allzu übel.:oops:

wer das ganze mal selbst ausprobieren möchte, sollte eine txt datei mit diesem Inhalt den gleichen Ordner packen.

name1;F307;rfid1;barcode1;archivnummer1;01.01.2012 um 00:00:04
name2;F307;rfid2;barcode2;archiv2;12.09.2001 um 14:05:05
name3;F307;rfid3;;archiv3;12.09.2000 um 12:05:05
name4;B100;rfid4;barcode4;archiv4;12.10.2017 um 05:05:05
name5;B100;rfid5;;;10.01.2012 um 00:00:04
name6;F102;rfid6;;archiv6;01.01.2015 um 00:00:04
name7;F307;rfid7;barcode7;archiv7;01.07.2012 um 00:00:00
name8;F307;rfid8;barcode8;archiv8;01.03.2012 um 10:40:00
name9;B101;;;;
 
Zuletzt bearbeitet:
Code:

Java:
import java.io.*;
import javax.swing.JFrame;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Point;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.AbstractAction;
import javax.swing.Icon;
import javax.swing.SwingUtilities; 
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableRowSorter;
import javax.swing.table.TableModel; 
import java.awt.EventQueue;
import java.awt.event.*;
import java.text.*;
import java.util.*;
import javax.swing.*;
import java.awt.Color;
import java.awt.Component;

public class tabelle extends JFrame  {
    private static final long serialVersionUID = 1L;
    private static final String[] TABLE_COLUMN_NAMES = new String[] {
    	"Name", "Raum", "RFID Nummer", "Barcode", "Archivnummer", "Datum"
    };
	
    File allFile = new File("texttabelle.txt");
    int readersize = 1;
    Calendar greenDate = new GregorianCalendar(2012, 00, 01, 00, 00, 00);
    Calendar foundDate = new GregorianCalendar();
    int counter;
    int counterGreen = 0;
    int counterRed = 0;
    int []colorRed = new int [10000];
    int []colorGreen = new int [10000];
    int colorWhite;
    JPanel centerPanelPicture = new JPanel(new BorderLayout());			
    JPanel centerPanelTable = new JPanel(new BorderLayout());
    private JTable table;
    private DefaultTableModel model;
    
    JComboBox settingBox1 = new JComboBox(new String[] {
        	"01","02","03","04","05","06","07","08","09","10","11","12","13","14",
        	"15","16","17","18","19","20","21","22","23","24","25","26","27","28",
        	"29","30","31"});
    int day = 01;
    
    JComboBox settingBox2 = new JComboBox(new String[] {
    		"01","02","03","04","05","06","07","08","09","10","11","12"});
    int month = 00;
    
    JComboBox settingBox3 = new JComboBox(new String[] {
    		"2012","2013","2014","2015","2016","2017","2018","2019","2020","2021",});
    int year = 2012;
    
    JComboBox settingBox4 = new JComboBox(new String[] {
    		"00","01","02","03","04","05","06","07","08","09","10","11","12","13",
    		"14","15","16","17","18","19","20","21","22","23"});
    int hour = 00;
    
    JComboBox settingBox5 = new JComboBox(new String[] {
    		"00","01","02","03","04","05","06","07","08","09","10","11","12","13",
    		"14","15","16","17","18","19","20","21","22","23","24","25","26","27",
    		"28","29","30","31","32","33","34","35","36","37","38","39","40","41",
    		"42","43","44","45","46","47","48","49","50","51","52","53","54","55",
    		"56","57","58","59"});
    int minute = 00;
    
    JComboBox settingBox6 = new JComboBox(new String[] {
    		"00", "01","02","03","04","05","06","07","08","09","10","11","12","13","14",
        	"15","16","17","18","19","20","21","22","23","24","25","26","27","28",
        	"29","30","31","32","33","34","35","36","37","38","39","40","41","42",
        	"43","44","45","46","47","48","49","50","51","52","53","54","55","56",
        	"57","58","59"});
    int second = 00;
    
    JRadioButton radioAll = new JRadioButton("Alle Objekte", true);
    JRadioButton radioRoom = new JRadioButton("Objekte Raum");
    JRadioButton radioLast = new JRadioButton("Zuletzt gefundene Objekte");
    String room = "B100";
    JTextField textfield = new JTextField(room);
    private int mouseClm = -1, mouseRow = -1;
    
    //Konstruktor
    public tabelle() {
        model = new DefaultTableModel(TABLE_COLUMN_NAMES, 0);
        table = new JTable(model);
        table.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent evt) {
                Point p = evt.getPoint();
                mouseRow = table.rowAtPoint(p);
                mouseClm = table.columnAtPoint(p);}
        });
        
        
        enableSorting(table); //   aufruf methode   fürs sortieren
        
        Container contentPane = getContentPane();
        centerPanelTable.add(new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
        centerPanelTable.setVisible(true);		//Beim starten unsichtbar
        contentPane.add(centerPanelTable, BorderLayout.CENTER);
        JPanel southPanel = new JPanel(new GridLayout(1,7));

        JButton showAllObjectsButton = new JButton(new ShowAllObjectsAction("Bibliothek"));
        southPanel.add(showAllObjectsButton);
        showAllObjectsButton.setEnabled( true );
        
        JToggleButton updateButton = new JToggleButton(new updateAction("Aktualisieren"));
        southPanel.add(updateButton);
        updateButton.setEnabled(true);
        
        JButton settingButton = new JButton(new settingAction("Einstellungen"));
        southPanel.add(settingButton);
        settingButton.setEnabled( true );
        
        contentPane.add(southPanel, BorderLayout.SOUTH); 
        
        settingBox1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                final Object selectedItem = settingBox1.getSelectedItem();
                String a = selectedItem.toString();
                day = Integer.parseInt(a);}});
        
        settingBox2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                final Object selectedItem = settingBox2.getSelectedItem();
                String a = selectedItem.toString();
                month = (Integer.parseInt(a) - 1);}});
    
    settingBox3.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            final Object selectedItem = settingBox3.getSelectedItem();
            String a = selectedItem.toString();
            year = Integer.parseInt(a);}});
    
    settingBox4.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            final Object selectedItem = settingBox4.getSelectedItem();
            String a = selectedItem.toString();
            hour = Integer.parseInt(a);}});
    
    settingBox5.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            final Object selectedItem = settingBox5.getSelectedItem();
            String a = selectedItem.toString();
            minute = Integer.parseInt(a);}});
    
    settingBox6.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            final Object selectedItem = settingBox6.getSelectedItem();
            String a = selectedItem.toString();
            second = Integer.parseInt(a);}});

	textfield.setEnabled(false);				
	radioRoomListener rRL = new radioRoomListener();
	radioRoom.addActionListener(rRL);					
	OtherModus oM = new OtherModus();
	radioAll.addActionListener(oM);
	radioLast.addActionListener(oM);
    }
// Ende Konstruktor
    
    private class ShowAllObjectsAction extends AbstractAction {
        public ShowAllObjectsAction() {
            this(null);
        }
        public ShowAllObjectsAction(String text) {
            this(text, null);
        }
        public ShowAllObjectsAction(String text, Icon icon) {
            super(text, icon);
        }
        public void actionPerformed(ActionEvent e) {
            if(!allFile.exists()) {
                JOptionPane.showMessageDialog(null, "Die Angegebene TextdateiDatei existiert nicht.\nKann nicht fortfahren.", 
                		null, JOptionPane.ERROR_MESSAGE);
                return;
            }
            model.setRowCount(0);
            
            BufferedReader br = null;
            try{
                FileReader fr = new FileReader(allFile);
                br = new BufferedReader(fr);
                
                String[][] fileContent = readANSIFileToArray(br);
                
                for(String[] line:fileContent) {
                    model.addRow(line);
                }
                table.revalidate();
            }
            catch(IOException ex) {
                JOptionPane.showMessageDialog(null, "Beim lesen der Datei ist ein Fehler aufgetreten:\n" + ex.getMessage(), 
                		null,JOptionPane.ERROR_MESSAGE);
                
            } finally {
                try {
                    if(br != null) {
                        br.close(); 
                    }
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            
        //Unüberschriebener Standard DefaultTableCellRenderer, für die normale anzeige
            table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer()
            {
            //leer
            	});}
    }
    
    //ActionListener für aktualisieren Button
    private class updateAction extends AbstractAction{
   
    	public updateAction() {
            this(null);
        }
    	public updateAction(String text) {
            this(text, null);
        }
    	public updateAction(String text, Icon icon) {
            super(text, icon);
        }
    	
    	public void actionPerformed(ActionEvent e){
    		JToggleButton tBtn = (JToggleButton)e.getSource();
            if (tBtn.isSelected()) {
            	
               //aktualisieren der Tabelle wie bei "Bibliothek" button
               
               //Zwischen modus "alle Objekte" und "Objekte Raum" oder "Objekte letzter Sitzung wählen"
               if(radioAll.isSelected() || radioRoom.isSelected()){
            	   if(!allFile.exists()) {
            		   JOptionPane.showMessageDialog(null, "Die Angegebene TextdateiDatei existiert nicht.\nKann nicht fortfahren.", 
            				   null, JOptionPane.ERROR_MESSAGE);
            		   return;
            	   }
               }
               else if(radioLast.isSelected()){ 
               }
  
               model.setRowCount(0);
               
               BufferedReader br = null;
               //Zwischen modus "alle Objekte" und "Objekte Raum" oder "Objekte letzter Sitzung wählen"
               try{
            	   if(radioAll.isSelected() || radioRoom.isSelected()){
            		   FileReader fr = new FileReader(allFile);
            		   br = new BufferedReader(fr);
            	   }
            	   else if(radioLast.isSelected()){
            		  
            	   }
            	   
                   String[][] fileContent = readANSIFileToArray(br);
                   
                   for(String[] line:fileContent) {
                       model.addRow(line);
                   }
                   table.revalidate();
               }
               catch(IOException ex) {
                   JOptionPane.showMessageDialog(null, "Beim lesen der Datei ist ein Fehler aufgetreten:\n" + ex.getMessage(), 
                   		null,JOptionPane.ERROR_MESSAGE);
                   
               } finally {
                   try {
                       if(br != null) {
                           br.close(); 
                       }
                   } catch (IOException e1) {
                       e1.printStackTrace();
                   }
               }
               //Zweitens Zeilen Datum überprüfen
               int size = 0;
               try{
            	   size = arraySize(readersize);
            	   System.out.println("size = "+size);
               }
               catch(IOException et) {
                   JOptionPane.showMessageDialog(null, "Beim lesen der Datei ist ein Fehler aufgetreten!:\n" + et.getMessage(), 
                   		null,JOptionPane.ERROR_MESSAGE);
               }
               //Alle Zähler zurücksetzten, für das erneute benutzen
               counterRed = 0;
               counterGreen = 0;
               
               //Datum jedes Objektes aus der Tabelle hohlen und vergleichen
               for( counter = 0; (size-1)>=counter; counter++ ){
            	   String stringDate = (String)model.getValueAt(counter, 5);
            	   if(stringDate == null){
            		   stringDate = "01.09.1989 um 19:30:00";
            	   }
            	   SimpleDateFormat dateformat = new SimpleDateFormat("dd.MM.yyyy' um 'HH:mm:ss");
            	   try{
            		   Date dateDate = dateformat.parse(stringDate);
            		   foundDate.setTime(dateDate);	
            		   
            		   //Zeilen die gefärbt werden bestimmen
            		   if(greenDate.after(foundDate)){
            			   
            			   colorRed[counterRed] = counter;		
            			   counterRed = counterRed +1;
            		   }
            		   else if(greenDate.before(foundDate) || (greenDate.equals(foundDate))){		//auch abgefangen, falls gleich
            			   
            			   colorGreen[counterGreen] = counter;
            			   counterGreen = counterGreen +1;
            		   }
            		    
            	   }
            	   catch (ParseException pe){
            		   JOptionPane.showMessageDialog(null, "Das Datums Format konnte nicht eingelesen werden!:\n" + pe.getMessage(), 
                          		null,JOptionPane.ERROR_MESSAGE);
            	   } 
               }
               
               //Renderer fürs Aktualisieren / DefaultTableCellRenderer Klasse wird mit super überschrieben
               table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer(){
                  	public Component getTableCellRendererComponent(JTable table,
                              Object value, boolean isSelected, boolean hasFocus,
                              int row, int column) {
           
                          Component c = super.getTableCellRendererComponent(table, value,
                          		isSelected, hasFocus,
                          		row, column);
                          
                          for (int i = 0; i < counterRed; i++)
                          {	if (row == mouseRow && column == mouseClm) {
                        	  	   setBackground(Color.WHITE);
                          	   }
                          	   else if (row == colorRed[i]) {
                          		   setBackground(Color.RED);
                          		   System.out.println(colorRed[i] + " wird rot");
                       	   }
                          }	
                          for (int i = 0; i < counterGreen; i++)
                          {   if (row == mouseRow && column == mouseClm) {
                        	  	  setBackground(Color.WHITE);
                          	   }
                              else if(row == colorGreen[i]){
                            	  setBackground(Color.GREEN);
                            	  System.out.println(colorGreen[i] + " wird grün");
                          	   }
                          }
                          return this;  
                      }
                  });
                } 
    		else {}	}}
    	
 //ActionListener für die Einstellungen
    private class settingAction extends AbstractAction{
    	public settingAction() {
            this(null);
        }
    	public settingAction(String text) {
            this(text, null);
        }
    	public settingAction(String text, Icon icon) {
            super(text, icon);
        }
    	
    	public void actionPerformed(ActionEvent e) {
    	
    	//Unterklasse für das einstellungenfenster
    	final class setting extends JDialog{
    		//Konstruktor
    		public setting(){
    		    	Container settingContainer = getContentPane();
    		    	JPanel settingPanelNORTH1 = new JPanel(new GridLayout(1,7));
    		    	JPanel settingPanelNORTH = new JPanel(new GridLayout(3,1));
    		    	JPanel settingPanelCENTER = new JPanel(new GridLayout(1,7));
    		    	JPanel settingPanelSOUTH = new JPanel(new GridLayout(5,3));
    		    	JLabel settingHeadline = new JLabel("Stellen Sie den Zeitpunkt ein, ab dem Objekte makiert werden sollen.");
    		    	settingPanelNORTH.add(settingHeadline);
    		    	JLabel buffer10 = new JLabel("");
    		    	settingPanelNORTH.add(buffer10);
    		    	settingPanelNORTH.add(settingPanelNORTH1);
    		    	JLabel settingHeadline1 = new JLabel("Tag");
    		    	settingPanelNORTH1.add(settingHeadline1);
    		    	JLabel settingHeadline2 = new JLabel("Monat");
    		    	settingPanelNORTH1.add(settingHeadline2);
    		    	JLabel settingHeadline3 = new JLabel("Jahr");
    		    	settingPanelNORTH1.add(settingHeadline3);
    		    	JLabel buffer = new JLabel("     um");
    		    	settingPanelNORTH1.add(buffer);
    		    	JLabel settingHeadline4 = new JLabel("Stunde");
    		    	settingPanelNORTH1.add(settingHeadline4);
    		    	JLabel settingHeadline5 = new JLabel("Minute");
    		    	settingPanelNORTH1.add(settingHeadline5);
    		    	JLabel settingHeadline6 = new JLabel("Sekunde");
    		    	settingPanelNORTH1.add(settingHeadline6);
    		    	settingPanelCENTER.add(settingBox1);
    		    	settingPanelCENTER.add(settingBox2);
    		    	settingPanelCENTER.add(settingBox3);
    		    	JLabel buffer2 = new JLabel("     um");
    		    	settingPanelCENTER.add(buffer2);
    		    	settingPanelCENTER.add(settingBox4);
    		    	settingPanelCENTER.add(settingBox5);
    		    	settingPanelCENTER.add(settingBox6);
    		    	JLabel buffer3 = new JLabel("");
    		    	settingPanelSOUTH.add(buffer3);
    		    	JLabel buffer4 = new JLabel("");
    		    	settingPanelSOUTH.add(buffer4);
    		    	JLabel buffer5 = new JLabel("");
    		    	settingPanelSOUTH.add(buffer5);
    		    	ButtonGroup bg = new ButtonGroup();	
    		    	settingPanelSOUTH.add(radioAll);
    		    	JLabel buffer6 = new JLabel("");
    		    	settingPanelSOUTH.add(buffer6);
    		    	JLabel buffer7 = new JLabel("");
    		    	settingPanelSOUTH.add(buffer7);
    		    	settingPanelSOUTH.add(radioRoom);
    		    	settingPanelSOUTH.add(textfield);
    		    	JLabel buffer8 = new JLabel("");
    		    	settingPanelSOUTH.add(buffer8);
    		    	settingPanelSOUTH.add(radioLast);
    		    	JLabel buffer9 = new JLabel("");
    		    	settingPanelSOUTH.add(buffer9);
    		    	JLabel bufferA = new JLabel("");
    		    	settingPanelSOUTH.add(bufferA);
    		    	bg.add(radioRoom);
    		    	bg.add(radioAll);
    		    	bg.add(radioLast);
    		    	JButton settingButtonOK = new JButton(new settingOKaction("OK"));
    		    	settingPanelSOUTH.add(settingButtonOK);
    		    	
    		    	settingContainer.add(settingPanelNORTH, BorderLayout.NORTH);
    		    	settingContainer.add(settingPanelCENTER, BorderLayout.CENTER);
    		    	settingContainer.add(settingPanelSOUTH, BorderLayout.SOUTH);
    				}
            }
    	JDialog settingWindow = new setting();
    	settingWindow.setTitle("Einstellungen");
    	settingWindow.pack();
    	settingWindow.setLocation(400, 300);
    	settingWindow.setModal(true);
    	settingWindow.setResizable(false);
    	settingWindow.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    	settingWindow.setVisible(true);
    	settingWindow.setLocation(400, 100);
    	}
    }
    
    //ActionListener für das Einstellungen Unterfenster settingOKaction
    private class settingOKaction extends AbstractAction{
    	public settingOKaction() {
            this(null);
        }
    	public settingOKaction(String text) {
            this(text, null);
        }
    	public settingOKaction(String text, Icon icon) {
            super(text, icon);
        }
    	public void actionPerformed(ActionEvent e) {	
    		greenDate.set(year, month , day, hour, minute, second);
    		SwingUtilities.windowForComponent((Component)e.getSource()).dispose(); //schließt das JDialog wieder
    	}
    }
    
    private class radioRoomListener implements ActionListener{
    	public void actionPerformed(ActionEvent e){
    		textfield.setEnabled(true);
    	}}

    private class OtherModus implements ActionListener{
    	public void actionPerformed(ActionEvent e){
    		textfield.setEnabled(false);
    	}}

    
    //readANSIFILE methode
    private String[][] readANSIFileToArray(Reader reader) throws IOException {
        if(!(reader instanceof BufferedReader)) {
            return(readANSIFileToArray(new BufferedReader(reader)));
        }
        
        //Selber die größe des arrays festlegen
        LineNumberReader f;
        String line;
        int sizeANSIFile = 1;             //für die größe des arrays
        
        	f = new LineNumberReader(new FileReader("texttabelle.txt"));

        	while ((line = f.readLine()) != null) {
        	sizeANSIFile= f.getLineNumber();
        	}
        	f.close();	
        	
        BufferedReader br = (BufferedReader) reader;
        
        String[][] values = new String[sizeANSIFile][0];
        
        if(radioAll.isSelected() || radioLast.isSelected()){
        
        	int lineCounter = 0;
        	for(String s = null; (s = br.readLine()) != null; lineCounter++) {
        		String[] lineContent = s.split(";");		//länge von lineContent = anzahl Spalten
            
        		for(int y = 0, size = lineContent.length; y < size; y++) {
        			values[lineCounter] = lineContent;//Verbessert   values[lineCounter][y] = lineContent[y]; //Hm, values[lineCounter] = lineContent[y]; funktioniert leider nicht. Nie getestet, aber denke so müsste es auch klappen.
        		}
        	}
        }
        //hier für modus "Objekt Raum" Ergebniss ändern
        else if (radioRoom.isSelected()){
        	Boolean flagg = false;
        	room = textfield.getText();
        	System.out.println(room + " aus readANSIFileToArray");
        	int lineCounter = 0;
        	for(String s = null; (s = br.readLine()) != null; lineCounter++) {
        		
        		String[] lineContent = s.split(";"); 
        		//Überprüfen, ob in einem der Spalten der gesuchte raum steht
        		for(int i= 0, size = lineContent.length; i <size; i++ ){
        			if(room.equals(lineContent[i])){
        				flagg = true;	
        				System.out.println(lineContent[i] + " = " + flagg);
        			}
        			else{System.out.println(lineContent[i] + " != " + room);
        			}
        		}
        		//values nür befüllen, wenn die flagg gesetzt ist
        		if(flagg == true){	
        			for(int y = 0, size = lineContent.length; y < size; y++) {
        				values[lineCounter] = lineContent;
        			}
        		}
        		flagg = false;
        	}
        }
        return(values);
    }
    
    
    //Methode zum größe feststellen
    private int arraySize(int  readersize) throws IOException {
    	LineNumberReader g;
        String line;
        //readersize = 1;             //für die größe des arrays
        
        try {
        	g = new LineNumberReader(new FileReader("texttabelle.txt"));

        	while ((line = g.readLine()) != null) {
        		readersize= g.getLineNumber();
        	}
        	g.close();	
        	} 
        catch (IOException e) {
        	JOptionPane.showMessageDialog(null, "Fehler beim feststellen, der größe der Arrays!", 
            		null, JOptionPane.ERROR_MESSAGE);
        	}
    return readersize;
    }
    
    
    //Methode zum Sortieren
    public void enableSorting(JTable table) { 
        DefaultTableModel model = (DefaultTableModel) table.getModel(); 
        if (model == null) 
            {return; 
            }
            TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(); 
            table.setRowSorter(sorter); 
            sorter.setModel(model); 
    } 

    //main
    public static void main (String []args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                JFrame Window = new tabelle();
                Window.setTitle("RFID Finder Tabellenansicht");
                Window.setSize(780,637);
                Window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                Window.setVisible(true);
            }
        }); 
    } 
}

relevant sollten eigentlich nur der überschriebene DefaultTableCellRenderer ab zeile 328 und Zeile 103, wo ich die sortier Methode ab Zeile 570 aufrufe.

An alle die eine Idee haben, oder mir direkt helfen, schon einmal danke im voraus. :)
 
Zuletzt bearbeitet:

Camill

Bekanntes Mitglied
Folgendes müsste geändert werden:
[JAVA=342]
else if (row == colorRed) {
[/code] ->
[JAVA=342]
else if (row == table.convertRowIndexToView(colorRed)) {
[/code]
und
[JAVA=351]
else if(row == colorGreen){
[/code] ->
[JAVA=351]
else if(row == table.convertRowIndexToView(colorGreen)){
[/code]

Da sich die Daten in der View ändern, im Model jedoch nicht, musst der Index der Zeile(Model) zum Index der View "gemappt" werden.
 
OMG, du bist so geil !!!11elf <3

ne, im ernst, ich hab schon damit gerechnet meinen kompletten code umzuschreiben und hatte echt Panik,
weil ich nicht wusste ob es überhaupt klappt!

Ich hab halt wirklich 1h gegoogelt und convertRowIndexToView nicht gefunden. :D
Und in meinen 2 Java Büchern aus der Bibliothek steht leider nichts über die JTable drin.

Vielen Dank!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
SuperSeppel13 JTable cell renderer Java Basics - Anfänger-Themen 3
O hi - Frage zu JTable und Renderer Java Basics - Anfänger-Themen 6
M JTable Renderer Java Basics - Anfänger-Themen 7
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
richis-fragen JTable sowohl Spaltennamen wie auch Spaltenbeschriftungen Java Basics - Anfänger-Themen 7
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
G JTable Listselectionlistener friert das Programm ein Java Basics - Anfänger-Themen 8
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
J Zelleninhalt einer Jtable löschen Java Basics - Anfänger-Themen 2
E JTable einzelne Zelle färben Java Basics - Anfänger-Themen 2
thobren jtable arraylist Java Basics - Anfänger-Themen 12
thobren JTable Icon Java Basics - Anfänger-Themen 1
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
H Kapselung JProgressBar in JTable, aber getValueAt() greift nicht Java Basics - Anfänger-Themen 7
G JTable, Zeile auswählen und Ergebnis an Schaltfläche übergeben Java Basics - Anfänger-Themen 4
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
J JTable Spalteninhalt löschen Java Basics - Anfänger-Themen 1
J JTable Titel wird nicht angezeigt Java Basics - Anfänger-Themen 6
B jTable Spalte summieren Java Basics - Anfänger-Themen 7
N JTable auslesen Java Basics - Anfänger-Themen 6
O JTable in Excel mit Farben Java Basics - Anfänger-Themen 8
O Kommentar auf JTable Zelle Java Basics - Anfänger-Themen 2
M Jtable Reenderer Java Basics - Anfänger-Themen 0
O Popoup Menü im JTable richtig anzeigen Java Basics - Anfänger-Themen 6
M Jtable änderung updaten Java Basics - Anfänger-Themen 2
O JTable Suchfunktion Java Basics - Anfänger-Themen 2
M jTable bekommt null Java Basics - Anfänger-Themen 1
M JTable an andere Klasse übergeben Java Basics - Anfänger-Themen 2
M Datenbank in jTable Laden Java Basics - Anfänger-Themen 49
M Klasse in JTable einfügen Java Basics - Anfänger-Themen 7
S JTable Java Basics - Anfänger-Themen 16
S JTable mit Daten füllen Java Basics - Anfänger-Themen 7
L JTable Tagebuch Spaltenhöhe verändern Java Basics - Anfänger-Themen 3
S JTable - Filter an anderen Colums Java Basics - Anfänger-Themen 2
R JTable Suchfunktion mit SQL Daten Java Basics - Anfänger-Themen 2
C JTable update mit MySQL Datenbank Java Basics - Anfänger-Themen 1
C Best Practice JTable in MVC Pattern Java Basics - Anfänger-Themen 7
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
A zykl. Aktualisierne JTable Java Basics - Anfänger-Themen 9
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
C Werte aus JTable auslesen Java Basics - Anfänger-Themen 4
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
V JTable welcher Listener ? Java Basics - Anfänger-Themen 7
D Falsche Zeile wird in JTable gelöscht Java Basics - Anfänger-Themen 6
D MySQL Abfrage in JTable speichern Java Basics - Anfänger-Themen 43
D JTable Zeile wird nicht in MySQL gelöscht Java Basics - Anfänger-Themen 16
D JTable Zeilen löschen Java Basics - Anfänger-Themen 5
C Klassen JTable wird ohne Header aufgebaut Java Basics - Anfänger-Themen 6
K (JTable) Text einer Zelle auf der linken Seite kürzel Java Basics - Anfänger-Themen 2
B Kniffel JTable Java Basics - Anfänger-Themen 5
N JTable flackert Java Basics - Anfänger-Themen 8
T JTable Daten aus txt datei Java Basics - Anfänger-Themen 3
J ArrayList wird in JTable falsch angezeigt Java Basics - Anfänger-Themen 0
J Eintragen von Personen in JTable Java Basics - Anfänger-Themen 4
X JTable mit grünen und roten Punkten Java Basics - Anfänger-Themen 2
LexeB4F DEL --> JTable Zelleninhalt Java Basics - Anfänger-Themen 3
R JTable Auslesen Java Basics - Anfänger-Themen 1
Crazynet jTable erste Zeile mit deffinierten Werten Java Basics - Anfänger-Themen 0
K Collections Sortieren nach zweiter Spalte in JTable Java Basics - Anfänger-Themen 18
J JTable Wert gleich überschreiben Java Basics - Anfänger-Themen 6
S Zeile entfernen aus JTable Java Basics - Anfänger-Themen 15
S JTable clonen Java Basics - Anfänger-Themen 5
H Best Practice PDF JTable Java Basics - Anfänger-Themen 4
S In JTable Zeile selektieren mit Mausklick Java Basics - Anfänger-Themen 16
D JTable Probleme beim Sortieren von Zahlen. Java Basics - Anfänger-Themen 6
M JTable mit XML datei befüllen Java Basics - Anfänger-Themen 1
F Zeile bei JTable hinzufügen Java Basics - Anfänger-Themen 6
K JTable Bild einfügen Java Basics - Anfänger-Themen 1
M [JTable] getValue throws ArrayOutOfBoundException Java Basics - Anfänger-Themen 1
B JTable - Highlighter ??? Java Basics - Anfänger-Themen 3
S JTable LinkedList <Objekt> befüllen Java Basics - Anfänger-Themen 1
S JTable dynamisch mit Datenbankinhalten füllen Java Basics - Anfänger-Themen 6
W JTable mit einem JButton-Array füllen Java Basics - Anfänger-Themen 4
O JScrollPane zu gross für JTable Java Basics - Anfänger-Themen 2
L JTable Row selected -> fireTableDataChange do nothing. Java Basics - Anfänger-Themen 3
E JTable + TableModel updaten? Java Basics - Anfänger-Themen 1
O java.lang.IndexOutOfBoundsException JTable autoSort Java Basics - Anfänger-Themen 5
F JTable adding Row Java Basics - Anfänger-Themen 5
P jTable getColumnClass, mit unterschiedlichen Klassen in einer Column? Java Basics - Anfänger-Themen 5
M Eingabe in JTable bei Eingabe korrigieren Java Basics - Anfänger-Themen 2
Z jtable problem (das tausendste??) Java Basics - Anfänger-Themen 12
J JTable Java Basics - Anfänger-Themen 7
T JTable Java Basics - Anfänger-Themen 2
T JTable einzelne Zeilen löschen Java Basics - Anfänger-Themen 3
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
Uzi21 jTable / Inhalt speichern Java Basics - Anfänger-Themen 2
M Problem mit JTable und Model Java Basics - Anfänger-Themen 3
F Methoden JTable + 2 For-Schleifen Java Basics - Anfänger-Themen 4
C jtextfield und jtable Java Basics - Anfänger-Themen 34
X JTable mit Inhalten aus JTextField o.ä. füllen Java Basics - Anfänger-Themen 4
G JTable: SelectionListener Problem Java Basics - Anfänger-Themen 2
G JTable: Werte in Tabelle direkt ansprechen Java Basics - Anfänger-Themen 3
S Icons in JTable per ResultSet Java Basics - Anfänger-Themen 5
G Spalte in JTable unsichtbar machen, Zugriff auf Daten ermöglichen Java Basics - Anfänger-Themen 2
M Zelle von JTable mit Rahmen versehen Java Basics - Anfänger-Themen 4
G JTable: Inhalt einer selektierten Zeile speichern Java Basics - Anfänger-Themen 2
G JTable: mehrzeilige Zellen erstellen Java Basics - Anfänger-Themen 2
W Problem JTable Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben