11. december 2003 - 01:14Der er
23 kommentarer og 1 løsning
Hvordan sætter jeg farve på en celle i JTable?
Som det kan ses har jeg prøvet med DefaultTableCellRenderer i forbindelse med at farve enkelte celler i mit JTable. Jeg kan ikke finde ud af at få knyttet farven (som laves i klassen Cellefarver) til. Vh. anne
Tak for rådet, men det virker stadig ikke. Jeg tror at problemet ligger der hvor det returnerede (celle/this) skal addes til mit JTable ?! Hvad gør man med det returnerede?
Når du bruger: _table.setDefaultRenderer(Color.class, new Cellefarver()); er det Cellefarver som styrer hvordan cellen skal gentegnes og egentlig skulle der ikke være behov for mere.
Prøv at pille nedenstående ud - jeg kan ikke se behovet for det. Component celle = super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column);
Fjern også: public boolean isOpague(){ return true; }
og erstat det med:
setOpague(true);
if (value.equals("chefbartender")) { System.out.println("Grøn"); setBackground(Color.green); } else if (value.equals("dreng")) { System.out.println("Blå"); setBackground(Color.blue); } else if (value.equals("pige")) { System.out.println("Pink"); setBackground(Color.pink);
} return this;
Det må være fordi opague er false, når dine statements bliver udskrevet!
Endnu engang tak for rådet men... Jeg har rettet fejlen, jeg kan udskrive de rigtige farver i consollen, men der er stadig ingen farver på cellerne i JTable?! Jeg har også prøvet at lave cellerne om til buttons uden held :(
Det er virkelig fedt at du gider kigge på det, men hos mig virker det stadig ikke. Metoden _table.setDefaultRenderer( type, new Cellefarver()); tager ikke et String argument(type) kun et class argument? Hvordan fik du det til at spinde?
Ja det mener jeg. Jeg returnerer stadig celle i Cellefarver, har droppet setOpaque metoden, og indsat den nyeste rettelse _table.setDefaultRenderer( String.class, new Cellefarver()); Hvor går jeg galt?
Jeg tror at cellerne bliver farvet rigtigt nok i Cellefarver. Men jeg har en ide om at problemet ligger i GUIStreglist. I metoden scrollPaneMedData = new JScrollPane(_table); bliver de farvede celler vel ikke sendt med? Udskifter jeg _table med celle, får jeg nemlig 1 stor lyserød celle lavet. Så de rigtige farver bliver tildelt de rigtige celler, men de kommer ikke med i det JTable(_table) som hives over i det scrollPane(scrollPaneMedData), som igen addes til det Panel(VagtplanPanel) der skal vises?! Her er lige endnu en klasse(!), ved ikke om det hjælper?
-------------------VagtplanPanel----------------- import java.awt.*; import javax.swing.*; public class VagtplanPanel extends JFrame {
GUIPraefFelt praeffelt = new GUIPraefFelt(); GUIStregliste stregliste = new GUIStregliste(); GUIVagtliste vagtliste = new GUIVagtliste();
JPanel vagtPlanPanel = new JPanel();
/** Laver et JPanel til vagtplans gui'en og tilføjer en JLabel m. teksten "total a-style :-)" * * */ public JPanel createVagtplan() {
Jeg ved ikke om du har fået løst dit problem, under alle omstændigheder lovede jeg dig et eksempel som kunne køre - det kommer her, håber det hjælper dig på vej
public Class getColumnClass(int columnIndex) { return types [columnIndex]; } }); for(int i = 0; i < jTable1.getColumnCount(); i++) jTable1.setDefaultRenderer( jTable1.getColumnClass(i), new MyTableCellRenderer());
class MyTableCellRenderer extends DefaultTableCellRenderer {
public MyTableCellRenderer() { }
public java.awt.Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component celle = super.getTableCellRendererComponent (table, value, isSelected, hasFocus, row, column);
if (value == null) return celle;
if (value.equals("chefbartender")) { System.out.println("Grøn"); celle.setBackground(Color.green); } else if (value.equals("dreng")) { System.out.println("Blå"); celle.setBackground(Color.blue); } else if (value.equals("pige")) { System.out.println("Pink"); celle.setBackground(Color.pink); }
return celle; } } }
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.