[ Jovana_87_Bg @ 14.12.2012. 15:49 ] @
Pokusala sam da uradim uslovno bojenje teksta u tabeli. Npr. u koliko je u celiji upisano "RASHOD" da tekst u tom redu oboji crvenom bojom. Ja sam uspela da uradim da ukoliko se nadje u celiji teks "RASHOD" da oboji sve redove u tabeli crvenom bojom, medjutim ja zelim da mi oboji samo taj red a ne sve. Evo postavicu vam kod, i sliku kako izgleda a kako bi trebalo da izgleda. U koliko neko moze neka mi pomogne. Hvala unapred.
Code:

 for (int i = 0; i < jTable.getRowCount(); i++)
 {
  if(jTable.getModel().getValueAt(i, 0).toString().equals("RASHOD"))
     {
     jTable.setForeground(Color.red);
     i++;
     }
}


[ FooLControL @ 14.12.2012. 17:59 ] @
Mozes to uraditi tako sto ces implementirati prepareRenderer metodu JTable klase.

Code:
    @Override
    public Component prepareRenderer(TableCellRenderer renderer,
            int row, int col) {
        Component c = super.prepareRenderer(renderer, row, col);
        JComponent jc = (JComponent)c;

        jc.setForeground(Color.BLACK);
                
        if (getModel().getValueAt(row, 0).toString().equals("RASHOD"))
            jc.setForeground(Color.RED);

    return c;
}
[ Jovana_87_Bg @ 15.12.2012. 00:49 ] @
Iskreno, posto sam tek pocetnik u Javu, ne znam kako da implementiram ovaj kod. Kako da uradi, da se kod aktivira kad kliknem na dugme.

Code:

private void jButtonActionPerformed(java.awt.event.ActionEvent evt) {                                         
//KOD
}

[ FooLControL @ 15.12.2012. 01:31 ] @
Main table test:

Code:

public class TestTable extends JFrame {

    private Table table;
    
    public TestTable() {

        String[] columnNames = { "First Name", "Last Name", "Sport",
                "# of Years", "Vegetarian" };

        Object[][] rowData = {
                { "Kathy", "Smith", "Snowboarding", new Integer(5),
                        new Boolean(false) },
                { "John", "Doe", "Rowing", new Integer(3), new Boolean(true) },
                { "Joe", "Black", "Knitting", new Integer(2),
                        new Boolean(false) },
                { "Jane", "White", "Speed reading", new Integer(20),
                        new Boolean(true) },
                { "Joe", "Brown", "Pool", new Integer(10), new Boolean(false) } };

        table = new Table(rowData, columnNames);
        JScrollPane pane = new JScrollPane(table);

        JButton selectButton = new JButton("Select");
        selectButton.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent arg0) {
                table.setSelect(true);
                table.repaint();
            }
        });
        
        JButton deselectButton = new JButton("Deselect");
        deselectButton.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent arg0) {
                table.setSelect(false);
                table.repaint();
            }
        });
        
        JPanel panel = new JPanel();
        panel.add(pane);
        panel.add(selectButton);
        panel.add(deselectButton);
        add(panel);
        pack();

    }
    
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TestTable().setVisible(true);
            }
        });
    }
}



Table:

Code:

public class Table extends JTable {

    private Boolean select = false;
    
    public Table(Object[][] rowData, Object[] columnNames) {
        super(rowData, columnNames);
    }

    @Override
    public Component prepareRenderer(TableCellRenderer renderer, int row,
            int column) {
        Component c = super.prepareRenderer(renderer, row, column);
        JComponent jc = (JComponent) c;

        jc.setForeground(Color.BLACK);

        if (getModel().getValueAt(row, 0).toString().equals("Joe") && select)
            jc.setForeground(Color.RED);

        return c;
    }

    public void setSelect(Boolean select) {
        this.select = select;
    }
}
[ BoLa @ 08.01.2013. 14:10 ] @
Drugo rjesenje.

Napravis svoj renderer za String klasu i dodas ga na tabelu. Dakle napravi sljedecu klasu:

Code:

public class ExtTableRenderer extends DefaultTableCellRenderer  {
 
    public ExtTableRenderer() {
        super();
    }


    public Component getTableCellRendererComponent(JTable table, Object value, 
                                                   boolean isSelected, 
                                                   boolean hasFocus, int row, 
                                                   int column) {
// ovo je overridana metoda 
// ovdje vrsis provjeru polja i bojis ga po zelji

    // pozicija kolone na kojoj se nalazi tvoje polje koje zelis da provjeris u tvom slucaju to je nulta kolona    
      final int positionOfField = 0; 
      int highlightRow=-1;
      Color HIGHLIGHT = null;
      //uzmemo sadrzaj celije
      Component cell =super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    //provjerimo da li je null 
       if (table.getModel().getValueAt(row, positionOfField )!=null) {
            // pretvorimo sadrzaj celije u string. 
            // ovdje moze iskociti exception ako se pojavi neki drugi tip
            // bilo bi pametno dodati try catch
           String s =  table.getModel().getValueAt(row, positionOfField ).toString();
           if (s.compareTo("PRIHOD")==0) {
                //cell.setBackground(Color.GREEN);
               highlightRow=row;
               HIGHLIGHT= Color.GREEN;
           } else if (s.compareTo("RASHOD")==0){
               highlightRow=row;
               HIGHLIGHT= Color.RED;
               }
       } 
       //oboji pozadinu zelenom ako je prihod i crvenom ako je rashod
       // ako nije nista od ovoga koristi podrazumjevane boje
        setBackground(row == highlightRow
                    ? HIGHLIGHT
                    : isSelected
                    ? table.getSelectionBackground()
                    : table.getBackground());  
    // vrati tako obojenu celiju
      return cell;
    }
}


I u tvojoj trenutnoj klasi "zakaci ovaj renderer" za tabelu. (prilikom inicijalizacije dodaj ove linije)
Code:

        ExtTableRenderer render = new ExtTableRenderer();
        jTable1.setDefaultRenderer(Object.class,render);
        jTable1.setDefaultRenderer(String.class,render);
        jTable1.setDefaultRenderer(Integer.class,render);
        jTable1.setDefaultRenderer(Boolean.class,render);


Ovaj primjer podrazumjeva da radis sa JTable klasom instanca koje se zove jTable1.

Nisam runnovo ovaj kod mislim da bi trebao raditi nakon copy/pastea samog. Generalno ovdje je samo overridana jedna metoda DefaultCellRenderera i mjenja se pozadina zavisno od vrijednosti date celije. Primjeti da se ovo izvrsava za SVAKU celiju tabele. U kodu sam takodjer "zakacio" renderer za sve tipove podtaka u tabeli za svaki slucaj :)

Poz