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
Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
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.