1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

JTableCellRenderer

  • Morgaine
  • 5. Oktober 2010 um 09:38
  • Unerledigt
  • Morgaine
    4
    Morgaine
    Mitglied
    Punkte
    110
    Beiträge
    15
    • 5. Oktober 2010 um 09:38
    • #1

    Hallo Leute,

    ich weiß zu diesem Thema gibt es unglaublich viele Einträge, jedoch hab ich jetzt schon ziemlich viele durch und komme immer noch auf kein Ergebnis.

    Nun zu meinem Problem:

    Ich möchte die Schriftfarbe der Zellen meiner JTable je nach Text ändern. Hierfür habe ich folgenden Code verfasst:

    Code :

    Code
    public class ScoreTableCellRender extends DefaultTableCellRenderer
     {
        private static final long serialVersionUID = 3503110144069061261L;
    
    
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            // TODO Auto-generated method stub
            JLabel c = (JLabel)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            String s = value.toString();
    
            if(s.equals("NB")){
                c.setForeground(Color.GRAY);
                c.setText((String) value);
            }
            else if(s.equals("NOK")){
                c.setForeground(Color.ORANGE);
                c.setText((String) value);
            }
            else if(s.equals("NNOK")){
                c.setForeground(Color.RED);
                c.setText((String) value);
            }
            else if(s.equals("OK")){
                c.setForeground(Color.BLACK);
                c.setText((String) value);
            }
            return c;
        }
    }
    Alles anzeigen


    Hier mein Modell:

    Code
    public class StatistikTabellenModell extends AbstractTableModel{
    
    
        private static final long serialVersionUID = -2712404378541056977L;
    
        private int ColumnCount = 1;
        private int RowCount = 1;
        private String[][] Values;
    
        public StatistikTabellenModell(int c, int r)
        {
            ColumnCount = c;
            RowCount = r + 1;
        }
    
    
        public int getColumnCount() {
            // TODO Auto-generated method stub
            return ColumnCount;
        }
    
    
        public int getRowCount() {
            // TODO Auto-generated method stub
            return RowCount;
        }
    
    
        public Object getValueAt(int rowIndex, int columnIndex) {
            // TODO Auto-generated method stub
            if(Values != null)
                return Values[rowIndex][columnIndex];
            else
                return " ";
        }
    
        public void setColumnCount(int i){
            ColumnCount = i;
            Values = new String[RowCount+1][ColumnCount];
        }
    
        public void setRowCount(int i){
            RowCount = i;
            Values = new String[RowCount+1][ColumnCount];
        }
    
        public void setValue(String[] d, String[][] a)
        {
            Values = new String[RowCount+1][ColumnCount];
            for(int i = 0; i < d.length; i++)
                Values[0][i] = d[i];
    
            for(int i = 0; i < a.length; i++){
                for (int j = 0; j < a[i].length; j++)
                    Values[i+1][j] = a[i][j];
            }
        }
    }
    Alles anzeigen

    Und der Teil des Hauptprogramms der relavant ist:

    Code
    ScoreTableCellRender str = new ScoreTableCellRender();
    TAnzeigeModell2.setValue(ColDate, Values2);
    TAnzeige2.setDefaultRenderer(String.class, str);



    Ich hoffe wirklich, dass ihr mir helfen könnt und bedanke mich schon mal im Vorraus.

    lg
    Morgaine

  • Paulchen
    1
    Paulchen
    Gast
    • 5. Oktober 2010 um 10:22
    • #2

    Und was ist das Problem? Was tut der Code (nicht)?

  • Morgaine
    4
    Morgaine
    Mitglied
    Punkte
    110
    Beiträge
    15
    • 5. Oktober 2010 um 10:30
    • #3

    Die Farben verändern sich nicht. Also den Text zeigt er an, jedoch nicht in der richtigen Farbe.

  • Ramses13
    4
    Ramses13
    Mitglied
    Reaktionen
    4
    Punkte
    164
    Beiträge
    31
    • 5. Oktober 2010 um 19:51
    • #4

    Im TableModel die Methode getColumnClass überschreiben und String.class zurückgeben (sofern nur Strings dargestellt werden sollen, was laut setDefaultRenderer wohl der Fall ist).
    Ansonsten ist der Teil des Hauptprogramms unvollständig, da könnte auch noch die eine oder andere Kleinigkeit falsch sein.

    Meine CellRenderer sehen übrigens meist so aus:

    Code
    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);
    		if (row % 2 == 0) {
    			c.setBackground(Color.RED);
    		}
    		else {
    			c.setBackground(Color.GREEN);
    		}
    		return c;
    	}
    Alles anzeigen
  • Morgaine
    4
    Morgaine
    Mitglied
    Punkte
    110
    Beiträge
    15
    • 7. Oktober 2010 um 09:06
    • #5

    Also daran, dass c ein JLabel war hat es nicht gelegen!

    Was könnte denn am Hauptprogramm noch fehlen?

  • Ramses13
    4
    Ramses13
    Mitglied
    Reaktionen
    4
    Punkte
    164
    Beiträge
    31
    • 7. Oktober 2010 um 09:36
    • #6

    Im Hauptprogramm:

    Code
    JTable table = new JTable(new TestTableModel());
    table.setDefaultRenderer(String.class, new TestTableCellRenderer());


    getColumnClass bringt auch nichts? Ich dachte eher, dass dort das Problem liegt.

  • Morgaine
    4
    Morgaine
    Mitglied
    Punkte
    110
    Beiträge
    15
    • 7. Oktober 2010 um 09:46
    • #7

    Bezüglich Hauptptogramm, das hab ich schon. Ist nur an einer anderen Stelle. Der Text wird ja richtig angezeigt nur die Formatierung klappt nicht.

    Nein hat nicht funktioniert, dann ist das ganze Programm abgestürzt weil in der Funktion public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) value plötzlich null war.


  • Morgaine
    4
    Morgaine
    Mitglied
    Punkte
    110
    Beiträge
    15
    • 7. Oktober 2010 um 10:09
    • #8

    Hallo,

    ich habe das Problem gelöst. Ich fange einfach die NULL Werte in public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) ab und schon funktioniert es.
    Danke für die Tipps.

  • Ramses13
    4
    Ramses13
    Mitglied
    Reaktionen
    4
    Punkte
    164
    Beiträge
    31
    • 7. Oktober 2010 um 13:16
    • #9

    Nun ja, wenn value null ist, dann ist das wohl ein Problem im Modell, dass dort Werte nicht gesetzt sind (oder die Zeilen/Spaltenanzahl nicht stimmt).

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung