Mehrere Tabellen Zellen gleichzeitig färben

skrobi

Mitglied
Hallo,
ich habe nachfolgende Tabelle in der ich beim Anklicken einer Tabellen-Zelle diese CYAN-farbig färbe.
Dies funktioniert einwandfrei.

Wie muss ich den Code ändern bzw. ergänzen, damit nicht nur die angeklickte Zelle Cyan gefärbt wird, sondern noch
zusätzlich Weitere andersfarbig
z.B.: rc(row+x1, column+y1).setBackground(Color.RED); ?
oder: rc(row-x2, column-y4).setBackground(Color.YELLOW); ?

Vielen Dank für Eure Unterstützung
skrobi


Java:
JTable WORKTAB_table = new JTable(WORKTAB_model)
  {
  :
  public boolean isCellEditable( int rowIndex , int columnInd ex)
  {
  :
   class  CustomRenderer extends DefaultTableCellRenderer {
   :
  public CustomRenderer(int rows, int cols) {
          }  //  END  public CustomRenderer(int rows, int cols) {

          public CustomRenderer(String[][] WORKTAB_DATA, String[] WORKTAB_UEBER) {
              // TODO Auto-generated constructor stub
            }

            @Override
          public Component getTableCellRendererComponent(
            JTable table, Object value, boolean isSelected, boolean hasFocus,
          int row, int column) {
    
          Component rc = super.getTableCellRendererComponent
                         (table, value, isSelected, hasFocus, row, column);
    
        if      (row    == A.SafeIx1_Row &&
                column == A.SafeIx1_Col) {
                 rc.setBackground(Color.CYAN);
//               ====>>>>   hier so oder so ähnlich ergänzen
// z.B.:       rc(row+x1, column+y1).setBackground(Color.RED);   ? 
// oder:     rc(row-x2, column-y4).setBackground(Color.YELLOW);?
               };
 

Oneixee5

Top Contributor
Ändere das Tabellenmodell und rufe fireTableCellUpdated(row, column) für die entsprechenden Zellen auf. Das Value-Object im TableModel sollte eine Eigenschaft enthalten, aus welcher die Farbe abgeleitet werden kann. Das TableModel kann z.B. über einen SelectionListener beeinflusst werden.
 

Neumi5694

Top Contributor
Leider geht aus deiner Beschreibung nicht hervor, wovon abhängt, welche Farbe gesetzt werden soll.

Eine Möglichkeit ist, das so zu machen wie @Oneixee5 vorgeschlagen hat.

Deine Idee, das anhand der Indizes zu prüfen, ist genauso gut, Java macht das ja selbst so bei gewissen Look&Feels, wo jede zweite Zeile anders gefärbt ist. Nun musst du halt noch irgendwo hinterlegen, für welche Indizes welche Farbe gilt.
 

mihe7

Top Contributor
Deine Idee, das anhand der Indizes zu prüfen, ist genauso gut, Java macht das ja selbst so bei gewissen Look&Feels, wo jede zweite Zeile anders gefärbt ist. Nun musst du halt noch irgendwo hinterlegen, für welche Indizes welche Farbe gilt.
Ja, das funktioniert sehr gut, wenn man z. B. jede zweite Zeile andersfarbig darstellen möchte. Im konkreten Fall sehe ich allerdings das Problem, dass man im Renderer dafür sorgen müsste, dass die anderen Zellen/Zeilen ebenfalls neu gezeichnet werden -> hervorragende Fehlerquelle. Da ist der Ansatz von @Oneixee5 m.E. wesentlich sauberer: die Auswahl führt zur Änderung im Model und die wird dann einfach dargestellt.
 

Neumi5694

Top Contributor
Bei Farbänderung neu zeichnen zu lassen, ist in jedem Fall eine gute Idee. Aber ob sie Teil der Daten sein sollte, hängt wirklich vom Design ab.
Eine markierte Zeile hat ja standardmäßig eine andere Farbe - ohne dass dies Teil der Daten ist.

Geht es um die Position in der sichtbaren Tabelle? Dann ist das Speichern der Farbe als Wert sinnlos. Hängt die Farbe der gesamten Zeile vom Wert des Feldes einer bestimmten Spalte ab (ob nun die Farbe direkt gespeichert wird oder ein Wert, der entsprechend gemappt wird, lass ich mal außen vor)? Dann sollte die Zeile auch neu gezeichnet werden, wenn sich der Wert des Feldes in dieser Spalte ändert.

Ich hab's bei einer Liste selbst auch schon in den Daten hinterlegt, um jeweils Gruppen von Zeilen gleich zu färben. Ist eine funktionierende Quick& Dirty Lösung. Es hängt wirklich vom jeweiligen Fall ab.

Es gibt einfach zu wenig Informationen darüber, was der OP eigentlich vorhat, um das beurteilen zu können.
 

mihe7

Top Contributor
Moment, wir reden gerade aneinander vorbei. Ich habe nicht gesagt, dass man die Farben in den Daten speichern soll, es spricht jedoch überhaupt nichts dagegen, den Zugriff auf die Farben in ein Model für die JTable (bzw. deren Renderer) aufzunehmen. Wenn man will, kann man das komplett vom TableModel entkoppeln und ein Model für Renderer anbieten.

Mal kurz was überlegen:
Java:
record CellColor(Color background, Color foreground) {}

@FunctionalInterface
interface TableCellColorModel {
    CellColor getColor(int row, int col, boolean isSelected, boolean hasFocus);
}

// hier mal als Decorator
public class ColorRenderer implements TableCellRenderer {
    private final TableCellRenderer renderer;
    private final TableCellColorModel model;

    public ColorRenderer(TableCellRenderer renderer, TableCellColorModel model) {
        this.renderer = renderer;
        this.model = model;
    }

    @override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        Component comp = renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        CellColor cellColor = model.getColor(row, col, isSelected, hasFocus);
        if (cellColor != null) {
            comp.setForeground(cellColor.foreground());
            comp.setBackground(cellColor.background());
        }
        return comp;
    }

    public static void decorateColumns(JTable table, TableCellColorModel colors) {
        table.getColumnModel().getColumns().asIterator().forEachRemaining(col -> decorateColumn(col, colors));
    }

    private static void decorateColumn(TableColumn column, TableCellColorModel colors) {
        TableCellRenderer renderer = column.getTableCellRenderer();
         if (renderer instanceof ColorRenderer) {
             return;
         }
         column.setTableCellRenderer(new ColorRenderer(renderer, colors));
    }
}
Ist natürlich nur eine ungetestete Skizze, aber damit sollte sich z. B. folgendes realisieren lassen:
Java:
final CellColor secondRowColor = new CellColor(Color.LIGHT_GRAY, Color.BLACK);
final TableCellColorModel colors = (r,c,s,f) -> !s && !f && r % 2 == 1 ? secondRowColor : null;
ColorRenderer.decorateColumns(table, colors);
Es muss also nichts gespeichert werden. Das Model lässt sich jetzt natürlich beliebig implementieren, z. B. mit Zugriff auf das TableModel, wenn man es braucht, oder mit einem expliziten Setzen von Farben für Spalten/Zeilen usw. Natürlich kann ich mir auch die JTable angeben lassen und mir das SelectionModel besorgen, um entsprechende Events auszuülösen...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M gleicher TableCellRenderer für mehrere unterschiedliche Tabellen AWT, Swing, JavaFX & SWT 5
T JTable - mehrere Tabellen verknüpfen AWT, Swing, JavaFX & SWT 14
T Swing Mehrere Ausgaben in JTextArea AWT, Swing, JavaFX & SWT 2
H Mehrere Panels auf JFrame AWT, Swing, JavaFX & SWT 8
Apfelbaum2005 Swing JFrame mehrere JPanels mit unterschiedlichen Formen hinzufügen AWT, Swing, JavaFX & SWT 1
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
I Scene Builder - mehrere Seiten AWT, Swing, JavaFX & SWT 6
P Swing Mehrere JLabels mit ImageIcon in JPanel lesen AWT, Swing, JavaFX & SWT 1
schoel27 Mehrere JButtons sollen das gleiche Event auslösen AWT, Swing, JavaFX & SWT 2
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
M mehrere jTextField untereinander AWT, Swing, JavaFX & SWT 1
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
B Swing Sudoku: Laden / Speichern von Zahlen aus/in mehrere JTextFields aus/in eine(r) Textdatei AWT, Swing, JavaFX & SWT 9
M JavaFX JavaFX in mehrere Controller AWT, Swing, JavaFX & SWT 21
R mehrere buttons mit forschleife kreieren und individuell bearbeiten AWT, Swing, JavaFX & SWT 1
N JavaFX 1 Listener für mehrere ChoiceBoxen AWT, Swing, JavaFX & SWT 3
N Textdatei GUI, Text in Textarea anzeigen mehrere Zeilen AWT, Swing, JavaFX & SWT 1
temi JavaFX Mehrere Views mit Stage.setScene() oder mit Scene.setRoot()? AWT, Swing, JavaFX & SWT 7
P Swing Mehrere JPanels auf ein JFrame hinzufügen? AWT, Swing, JavaFX & SWT 2
T Swing Tetraeder - mehrere Punkte verbinden? - Ansätze gesucht AWT, Swing, JavaFX & SWT 2
K JavaFX in mehrere Controller aufteilen AWT, Swing, JavaFX & SWT 29
K JavaFX in mehrere Controller aufteilen AWT, Swing, JavaFX & SWT 0
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
K Mehrere Linien zeichnen AWT, Swing, JavaFX & SWT 8
J JavaFX - mehrere Views, Model durchreichen AWT, Swing, JavaFX & SWT 10
it_is_all Swing Mehrere JComboBoxen - wie die versch. Boxen mit ItemStateChange auslesen? AWT, Swing, JavaFX & SWT 3
M Swing Mehrere Textfelder mit ScrollBars - Größe der Felder AWT, Swing, JavaFX & SWT 0
W JavaFX Mehrere Klassen in ein TableView AWT, Swing, JavaFX & SWT 6
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17
L JavaFX Mehrere JavaFX Szenen mit einem Menü AWT, Swing, JavaFX & SWT 1
D Java FXML mehrere Fenster AWT, Swing, JavaFX & SWT 4
F JavaFX Mehrere Stages "managen" AWT, Swing, JavaFX & SWT 2
r4w Changelistener auf mehrere Textfelder AWT, Swing, JavaFX & SWT 5
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
S Swing Mehrere Modal-Dialoge übereinander AWT, Swing, JavaFX & SWT 5
T 2D-Grafik JFreeChart mehrere Y-Achsen AWT, Swing, JavaFX & SWT 2
C JavaFX mehrere Kreise nach Eingabeprozess ausgeben AWT, Swing, JavaFX & SWT 2
Thallius Swing Mehrere tausend "Panels" erstellen AWT, Swing, JavaFX & SWT 3
C Java FX Warnmeldung: Mehrere Fonts gehören derselben Familie und Stil AWT, Swing, JavaFX & SWT 2
J Mehrere JInternalFrame; GetValues AWT, Swing, JavaFX & SWT 1
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
K JavaFX Mehrere Cell Editors in einem TreeView Item AWT, Swing, JavaFX & SWT 2
KaffeeFan mehrere JTextField durchlaufen AWT, Swing, JavaFX & SWT 4
J Java -8 Action Listener für mehrere Buttons AWT, Swing, JavaFX & SWT 9
T Dynamisch mehrere Checkboxen anlegen AWT, Swing, JavaFX & SWT 2
G JavaFX Menü und mehrere Scenes AWT, Swing, JavaFX & SWT 16
R Swing Mehrere JTextFields mit einem Document Listener AWT, Swing, JavaFX & SWT 2
D Mehrere RadiButtons auswählar AWT, Swing, JavaFX & SWT 3
P Swing JTable mehrere Zeilen markieren AWT, Swing, JavaFX & SWT 1
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
T JavaFX FXMLController für mehrere FXML? AWT, Swing, JavaFX & SWT 7
G mehrere Action-Abfolgen erfassen AWT, Swing, JavaFX & SWT 6
elischa JFrame über mehrere JPanel und Listener AWT, Swing, JavaFX & SWT 17
X Swing JPanel mehrere Ebenen zeichnen AWT, Swing, JavaFX & SWT 13
J Mehrere Hyperlinks "stilvoll" darstellen. AWT, Swing, JavaFX & SWT 1
G Mehrere Strings um Kreis zeichnen und positionieren AWT, Swing, JavaFX & SWT 0
S JavaFX Mehrere TreeTableView's synchron scrollen AWT, Swing, JavaFX & SWT 0
U Mehrere Oberflächeninstanzen seperat schließen AWT, Swing, JavaFX & SWT 5
J Rahmen um mehrere GUI Einzelteile AWT, Swing, JavaFX & SWT 2
S Layouts, mehrere Buttons nebeneinander AWT, Swing, JavaFX & SWT 2
M Mehrere Fenster innerhalb einer Application AWT, Swing, JavaFX & SWT 3
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
M ActionListener für mehrere Klassen AWT, Swing, JavaFX & SWT 4
T [LWJGL] mehrere Displays? AWT, Swing, JavaFX & SWT 19
SexyPenny90 Mehrere Fenster AWT, Swing, JavaFX & SWT 2
M Handling 1 Fenster mehrere Panels AWT, Swing, JavaFX & SWT 2
Y Mehrere JSlider verlinken AWT, Swing, JavaFX & SWT 6
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
O Swing JLabel mehrere Zeilen AWT, Swing, JavaFX & SWT 2
P mehrere Rectangles per JButton AWT, Swing, JavaFX & SWT 9
B JToolBar dynamisch auf mehrere Zeilen erweitern AWT, Swing, JavaFX & SWT 2
Jats Zeichen auf mehrere JPanels AWT, Swing, JavaFX & SWT 7
G Mehrere Probleme mit Java's GUI AWT, Swing, JavaFX & SWT 6
G Mehrere Layoutprobleme AWT, Swing, JavaFX & SWT 2
Kenan89 JTable mehrere ListSelections AWT, Swing, JavaFX & SWT 2
M TextArea über mehrere Zeilen - wie Zeileanzahl abfragen? AWT, Swing, JavaFX & SWT 5
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
A mehrere Zeilen in GUi ausgeben AWT, Swing, JavaFX & SWT 2
N Mehrere Tasks nacheinander ausführen AWT, Swing, JavaFX & SWT 7
C SWT Mehrere Bilder in GUI laden AWT, Swing, JavaFX & SWT 5
propra Mehrere Objekte gleichzeitig verschieben AWT, Swing, JavaFX & SWT 7
M 2D-Grafik Mehrere Linien (nacheinander) übereinander Zeichnen AWT, Swing, JavaFX & SWT 6
M Mehrere JPanel nacheinander?! AWT, Swing, JavaFX & SWT 11
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
K SWT Mehrere Einträge ins Clipboard legen AWT, Swing, JavaFX & SWT 2
C Swing Ein JFrame mehrere Ansichten AWT, Swing, JavaFX & SWT 8
C Swing Mehrere JSlider sollen aufeinander reagieren AWT, Swing, JavaFX & SWT 4
GUI-Programmer JFilechooser, mehrere Datein selektieren und Reihenfolge (2) AWT, Swing, JavaFX & SWT 8
S Mehrere JLists - Wie kennzeichnen? AWT, Swing, JavaFX & SWT 2
S Swing MVC Ein JFrame, mehrere JPanels AWT, Swing, JavaFX & SWT 6
J Mehrere JRadioButtons, aber nur 1 darf ausgewählt sein AWT, Swing, JavaFX & SWT 4
L Swing Mehrere Button die selbe Größe AWT, Swing, JavaFX & SWT 4
B AWT mehrere Fenster schließen AWT, Swing, JavaFX & SWT 8
I Wie mehrere JComboBoxen in Abhängigkeit einer anderen Box ändern? AWT, Swing, JavaFX & SWT 8
G mehrere JPanel in ein (vertikales) JScrollPane AWT, Swing, JavaFX & SWT 8
F Swing Mehrere Textfelder in Scrollpane einfügen und dann zum Scrollen bringen? AWT, Swing, JavaFX & SWT 4
GianaSisters Swing jTable - Feldtext soll mehrere Zeilen haben AWT, Swing, JavaFX & SWT 3
K JFileChooser mehrere Dateien markieren ohne STRG AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben