Avatar billede jakobbak Nybegynder
24. marts 2004 - 20:42 Der er 3 kommentarer og
1 løsning

Sætte farver på celler

Jeg har et jTable hvor den øverste halvdel af cellerne skal være røde og den anden halvdel grønne. Hvordan gøres det?? Jeg har set flere steder eksempler på defaultTableRenderer, men kan ikke rigtig få det til at virke, måske er der en der kan skrive en kode der bare laver en tabel hvor halvdelen af felterne er røde og den anden halvdel grønne.
Avatar billede _carsten Nybegynder
24. marts 2004 - 21:09 #1
Her er et eksempel, måske kastet sammen lidt for hurtigt, tror dog strategien kan følges


public class JFrame_1 extends javax.swing.JFrame {
    public JFrame_1() {
        initComponents();
    }

    private void initComponents() {
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jScrollPane1.setViewportView(jTable1);

        getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);

        javax.swing.table.TableColumnModel tcm = jTable1.getColumnModel();
        javax.swing.table.TableColumn column;
        for(int i = 0; i < jTable1.getColumnCount(); i++){
            column =  tcm.getColumn(i);;
            column.setCellRenderer(new MyCellRenderer());
        }

        pack();
    }

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
   
    public static void main(String args[]) {
        new JFrame_1().show();
    }
   

    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
}


// Det er her farver og en masse andet hekses
class MyCellRenderer extends javax.swing.JLabel
                                implements javax.swing.table.TableCellRenderer{
    public MyCellRenderer(){
        setOpaque(true);
    }
    public java.awt.Component getTableCellRendererComponent(javax.swing.JTable table,
                                                            Object value,
                                                            boolean isSelected,
                                                            boolean hasFocus,
                                                            int row,
                                                            int column) {
                                                               
        int rows = table.getRowCount();
       
        if(row < (rows / 2))
            setBackground(java.awt.Color.BLUE);
        else
            setBackground(java.awt.Color.GREEN);
       
        return this;
    }
}
Avatar billede _carsten Nybegynder
24. marts 2004 - 21:15 #2
Prøv eventuelt at erstatte MyCellRenderer med denne klasse, som gør den lidt mere livagtig

class MyCellRenderer extends javax.swing.JLabel
                                implements javax.swing.table.TableCellRenderer{
    public MyCellRenderer(){
        setOpaque(true);
    }
    public java.awt.Component getTableCellRendererComponent(javax.swing.JTable table,
                                                            Object value,
                                                            boolean isSelected,
                                                            boolean hasFocus,
                                                            int row,
                                                            int column) {
                                                               
        int rows = table.getRowCount();
       
        if(isSelected){
            if(hasFocus)
                setBackground(java.awt.Color.WHITE);
            else
                setBackground(table.getSelectionBackground());
        }
        else{
            if(row < (rows / 2))
                setBackground(java.awt.Color.BLUE);
            else
                setBackground(java.awt.Color.GREEN);
        }
        return this;
    }
}
Avatar billede _carsten Nybegynder
24. marts 2004 - 21:29 #3
Havde lige glemt en væsentlig detalje, ses længere nede.

class MyCellRenderer extends javax.swing.JLabel
                                implements javax.swing.table.TableCellRenderer{
    public MyCellRenderer(){
        setOpaque(true);
    }
    public java.awt.Component getTableCellRendererComponent(javax.swing.JTable table,
                                                            Object value,
                                                            boolean isSelected,
                                                            boolean hasFocus,
                                                            int row,
                                                            int column) {
                                                               
        int rows = table.getRowCount();
        setForeground(java.awt.Color.BLACK);
       
        if(isSelected){
            if(hasFocus)
                setBackground(java.awt.Color.WHITE);
            else
                setBackground(table.getSelectionBackground());
        }
        else{
            if(row < (rows / 2))
                setBackground(java.awt.Color.BLUE);
            else
                setBackground(java.awt.Color.GREEN);
        }
       
        // DENNE HAVDE JEG GLEMT, RET SÅ VIGTIG, ELLERS VISES
        // CELLENS VÆRDI IKKE
        setText(value == null ? "" : value.toString());
        return this;
    }
   
    // EGENTLIGT NOGET PLIDDER / PLADDER
    // MEN ILLUSTRERER VEL RIMELIG GODT
    // HVAD MAN KAN HEKSE AF FORSKELLIGE TING
    public void paint(java.awt.Graphics g){
        super.paint(g);
        g.setColor(java.awt.Color.RED);
        g.drawOval(10,3, 5, 5);
        g.drawRect(25,3, 5, 5);
    }
}
Avatar billede jakobbak Nybegynder
25. marts 2004 - 09:21 #4
Takker, jeg tror dit svar kan hjælpe, vil prøve det lidt senere i dag, du får point
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester