|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Feb 2008
Messaggi: 2
|
[JAVA] problema di visualizzazione con JTable
ciao a tutti!
dopo aver cercato in lungo e in largo una soluzione al mio problema, mi rivolgo a voi, sperando di mettere fine alle mie pene... Nella mia interfaccia ho una JTable. per poterne colorare determinate celle, ho inserito in un array il numero di riga della cella da colorare, dunque gli indici dell'array corrispondono alle colonne e il contenuto corrisponde all'unica cella da colorare in ciascuna colonna. Sono riuscita a farlo definendo un Renderer. il problema è cha da un certo punto in poi si incanta: vale a dire che il renderer delle ultime colonne resta uguale per tutte, indipendentemente dai valori contenuti nell'array. inoltre se sposto la scroll bar del JScrollPane contenente la tabella, i colori delle ultime colonne vengono semicancellati... con gli updateUI non ho risolto nulla.... non so che pesci prendere. Questa è la ridefinizione del Renderer. vittime è il nome dell'array. Codice:
public class MyTableRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); for (int i=0; i<npagine; i++) { if (column==i) cell.setBackground(row==vittime[i] ? Color.cyan : Color.white); } return cell; } } lo uso qui: Codice:
mtr = new MyTableRenderer(); for (int c=0;c<vittime.length;c++) { if (vittime[c]!=-1) mvtab.getColumnModel().getColumn(c).setCellRenderer(mtr); } ![]() |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Apr 2006
Messaggi: 225
|
Ti posto il mio renderer, l'unica cosa che ho fatto è stato settarlo alla tabella
Codice:
private class Renderer implements TableCellRenderer{ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { //table.getColumnModel().getColumn(0).setWidth(0); JLabel label = new JLabel(); if(value!=null) label.setText(value.toString()); if(isSelected){ label.setOpaque(true); label.setBackground(Color.ORANGE); }else if((row % 2)==0){ label.setOpaque(true); label.setBackground(new Color(166,202,240)); }else label.setBackground(Color.WHITE); return label; } } |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Feb 2008
Messaggi: 2
|
stringhe si, stringhe no
Ciao Tux, ti ringrazio, iniziavo a perdere le speranze!
ispirandomi al tuo ho modificato nel modo seguente: Codice:
public class MyTableRenderer implements TableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { //Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); JLabel label = new JLabel(); label.setText(value.toString()); for (int i=0; i<npagine; i++) { if (column==i) { //per ogni colonna if (row==vittime[i]) { //se la riga è quella indicata nel vettore colora d'azzurro label.setOpaque(true); label.setBackground( Color.cyan ); } else { label.setOpaque(true); label.setBackground( Color.white ); } } } return label; } } ![]() io per necessità devo colorare lo sfondo di alcune righe in alcune colonne, le righe da colorare sono nel vettore "vittime". Per alcune sequenze nel vettore vittime, funziona tutto bene. per altre no ![]() che sia un problema di concorrenza? non saprei come gestire delle thread, vorrei evitarlo ![]() |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Apr 2006
Messaggi: 225
|
Ho fatto velocemente una prova, purtroppo senza spulciare troppo il tuo codice, usando un Set<Integer> e mi sembra funzionare
![]() Praticamente controllo se il n° di riga è contenuto nel Set ed in quel caso cambio il colore Codice:
public class MyTableRenderer implements TableCellRenderer { Set<Integer> selected; public MyTableRenderer(Set<Integer> selected) { this.selected = selected; } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JLabel label = new JLabel(); if (value != null) label.setText(value.toString()); if (selected.contains(row)) { label.setOpaque(true); label.setBackground(Color.ORANGE); } else label.setBackground(Color.WHITE); return label; } } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:33.