Criar um JComboBox de cores

ae galera como eu crio um JComboBox que ao inves de caracteres eu tenho cores a escolher?

não axei nada parecido ainda alguem poderia me ajudar

eh isso que vc estah procurando ?

Color ComboBox: ComboBoxEditor Demo

eh isso mesmo que eu preciso mas to tendo um problema…o combo eu consigo fazer mostrar as cores mas não consigo fazer a celula da tabela mostrar a cor segue o codigo abaixo

public void GeraComboBox(JTable table,
            TableColumn tolerancia) {
        //Set up the editor for the sport cells.
        JComboBox tipoBox = new JComboBox();
        int[] values = new int[]{0, 128, 192, 255};
        for (int r = 0; r < values.length; r++) {
            for (int g = 0; g < values.length; g++) {
                for (int b = 0; b < values.length; b++) {
                    Color c = new Color(values[r], values[g], values[b]);
                    tipoBox.addItem(c);
                }
                tipoBox.setRenderer(new ColorComboRenderer());
            }
        }
        tolerancia.setCellEditor(new DefaultCellEditor(tipoBox));

        //Set up tool tips for the sport cells.
        DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
        renderer.setToolTipText("Escolha o tipo de horário");
        tolerancia.setCellRenderer(renderer);
    }

oq estou fazendo errado??

essa eu acho interessante vc para e refletir …
muito mastigado vc pode ficar mal acostumado !

Oi,

da uma olhada e vê se pode te ajudar… é um código para colorir o fundo da celula baseado em seus valores.

[code]import javax.swing.;
import java.awt.
;
import javax.swing.table.*;

public class Estudos extends JFrame{
public Estudos(){
super(“Exemplo de uma tabela simples”);

// colunas da tabela
String[] colunas = {"Nome", "Idade", "Sexo"};
	
// conteúdo da tabela	
Object[][] conteudo = {
    {"Osmar J. Silva", "32", "Masculino"},
    {"Maria Clara Gomes", "19", "Feminino"},
    {"Fernando Gomes", "15", "Masculino"},
    {"Carlos Vieira", "40", "Masculino"}
};
    
// constrói a tabela
JTable tabela = new JTable(conteudo, colunas);

// quero colorir o fundo das células da segunda coluna
// se o valor encontrado for menor que 20
TableCellRenderer tcr = new Colorir();
TableColumn column = 
    tabela.getColumnModel().getColumn(1);
column.setCellRenderer(tcr);

tabela.setPreferredScrollableViewportSize(new 
      Dimension(350, 50));

Container c = getContentPane();
c.setLayout(new FlowLayout());
		
JScrollPane scrollPane = new JScrollPane(tabela);
c.add(scrollPane);
	
setSize(400, 300);
setVisible(true);

}

public static void main(String args[]){
Estudos app = new Estudos();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

class Colorir extends JLabel implements
TableCellRenderer{
public Colorir(){
setOpaque(true);
}

public Component getTableCellRendererComponent(
JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column){

 if(Integer.parseInt(value.toString()) < 20){
   setBackground(Color.YELLOW);	
 }
 else{
   setBackground(table.getBackground());		
 }
 
 setText(value.toString());
 	
 return this;   	

}

public void validate() {}
public void revalidate() {}
protected void firePropertyChange(String propertyName,
Object oldValue, Object newValue) {}
public void firePropertyChange(String propertyName,
boolean oldValue, boolean newValue) {}
}[/code]

Tchauzin!

ué … eh bem parecido com o de um site q eu referenciei ontem !
:lol:

Tipo eu consigo pintar a celula da tabela…fazer um colorChoose e escolher a cor q eu quiser pra pintar a celula da tabela, e tambem consegui fazer um ComboBox de cores

mas oq eu nao estou conseguindo é fazer os dois trabalharem juntos…por exemplo acrescentei o JComboBox na minha tabela

[code] // ADICIONA UM COMBOBOX NA COLUNA ESCOLHIDA
public void GeraComboBox(JTable table,
TableColumn tolerancia) {
//Set up the editor for the sport cells.
JComboBox tipoBox = new JComboBox();
int[] values = new int[]{0, 128, 192, 255};
for (int r = 0; r < values.length; r++) {
for (int g = 0; g < values.length; g++) {
for (int b = 0; b < values.length; b++) {
Color c = new Color(values[r], values[g], values[b]);
tipoBox.addItem©;
}
tipoBox.setRenderer(new ColorComboRenderer());
}
}
tolerancia.setCellEditor(new DefaultCellEditor(tipoBox));

    //Set up tool tips for the sport cells.
    DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
    renderer.setToolTipText(&quot;Escolha o tipo de horário&quot;);
    tolerancia.setCellRenderer(renderer);
}[/code]

seto a coluna q eu quero q receba esse renderer

até ae tudo bem o problema é q oq eu seleciono nesse combobox ele não mostra a cor na celula da tabela e sim o codigo em RGB, ja tentei setar a coluna da tabela do tipo new Color e nada…oq eu faço?

Obs: Estou usando NetBeans

Tem como postar o código completo para podermos rodar? (ou um SCCEE)

acho q o erro está em adicionar a cor ao combobox, tente usar o método setBackgroundColor

com esse metodo eu ja tentei tb…meus codigos estao feitos no netbeans…

Aqui esta o Codigo do meu form q mostra a tabela

[code]package MinhaTabela;

import components.TableRenderDemo;
import java.awt.Color;
import java.awt.Component;
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;

public class MinhaTabela extends javax.swing.JFrame {

int index;

//Colorir colorir = new Colorir();
/** Creates new form MinhaTabela */
public MinhaTabela() {
    initComponents();
    GeraComboBox(horario, horario.getColumnModel().getColumn(2));
    GeraComboBox(horario, horario.getColumnModel().getColumn(4));
    GeraComboBox(horario, horario.getColumnModel().getColumn(6));
    GeraComboBox(horario, horario.getColumnModel().getColumn(8));
//Set up renderer and editor for the Favorite Color column.
}

public int getIndex() {
    return index;
}

// ADICIONA UM COMBOBOX NA COLUNA ESCOLHIDA
public void GeraComboBox(JTable table, TableColumn tolerancia) {
    //Set up the editor for the sport cells.
    JComboBox tipoBox = new JComboBox();
    tipoBox.addItem(Color.RED);
    tipoBox.addItem(Color.GREEN);

    tipoBox.setRenderer(new ColorComboRenderer());

    tolerancia.setCellEditor(new DefaultCellEditor(tipoBox));

    //Set up tool tips for the sport cells.
    DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
    renderer.setToolTipText("Escolha o tipo de horário");
    tolerancia.setCellRenderer(renderer);

}

@SuppressWarnings("unchecked")
// &lt;editor-fold defaultstate="collapsed" desc="Generated Code"&gt;
private void initComponents() {

    jScrollPane1 = new javax.swing.JScrollPane();
    horario = new javax.swing.JTable();
    jButton1 = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    getContentPane().setLayout(null);

    horario.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {null, null, null, null, null, null, null, null, null},
            {"Segunda", null, null, null, null, null, null, null, null},
            {"Terça", null, null, null, null, null, null, null, null},
            {"Quarta", null, null, null, null, null, null, null, null},
            {"Quinta", null, null, null, null, null, null, null, null},
            {"Sexta", null, null, null, null, null, null, null, null},
            {"Sábado", null, null, null, null, null, null, null, null},
            {"Domingo", null, null, null, null, null, null, null, null}
        },
        new String [] {
            "", "Entrada 1", "T", "Saida 1", "T", "Entrada 2", "T", "Saida 2", "T"
        }
    ) {
        boolean[] canEdit = new boolean [] {
            false, true, true, true, true, true, true, true, true
        };

        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return canEdit [columnIndex];
        }
    });
    horario.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
    horario.addKeyListener(new java.awt.event.KeyAdapter() {
        public void keyPressed(java.awt.event.KeyEvent evt) {
            horarioKeyPressed(evt);
        }
    });
    jScrollPane1.setViewportView(horario);

    getContentPane().add(jScrollPane1);
    jScrollPane1.setBounds(30, 40, 570, 402);

    jButton1.setText("jButton1");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });
    getContentPane().add(jButton1);
    jButton1.setBounds(490, 460, 73, 23);

    java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
    setBounds((screenSize.width-644)/2, (screenSize.height-552)/2, 644, 552);
}// &lt;/editor-fold&gt;

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

}                                        

private void horarioKeyPressed(java.awt.event.KeyEvent evt) {
    // TODO add your handling code here:
}


public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
            new MinhaTabela().setVisible(true);
        }
    });
}

// Variables declaration - do not modify
private javax.swing.JTable horario;
private javax.swing.JButton jButton1;
private javax.swing.JScrollPane jScrollPane1;
// End of variables declaration

}[/code]

Aqui a classe ColorComboRenderer

[code]package MinhaTabela;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;
import javax.swing.border.CompoundBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.MatteBorder;

public class ColorComboRenderer extends JPanel implements ListCellRenderer {
protected Color m_c = Color.black;

public ColorComboRenderer() {
super();
setBorder(new CompoundBorder(
new MatteBorder(2, 10, 2, 10, Color.white), new LineBorder(
Color.black)));
}

public Component getListCellRendererComponent(JList list, Object obj,
int row, boolean sel, boolean hasFocus) {
if (obj instanceof Color)
m_c = (Color) obj;
return this;
}

public void paint(Graphics g) {
setBackground(m_c);
super.paint(g);
}

public static void main(String[] a) {
JComboBox cbColor = new JComboBox();
int[] values = new int[] { 0, 128, 192, 255 };
for (int r = 0; r < values.length; r++)
for (int g = 0; g < values.length; g++)
for (int b = 0; b < values.length; b++) {
Color c = new Color(values[r], values[g], values[b]);
cbColor.addItem©;
}
cbColor.setRenderer(new ColorComboRenderer());

JFrame f = new JFrame();
f.addWindowListener(new WindowAdapter() {
        @Override
  public void windowClosing(WindowEvent e) {
    System.exit(0);
  }
});
f.getContentPane().add(cbColor);
f.pack();
f.setSize(new Dimension(300, 80));
f.show();

}
}[/code]

[quote=Shelson]ué … eh bem parecido com o de um site q eu referenciei ontem !
:lol: [/quote]

Vai ver é o mesmo =)

O código não é meu, achei o site interessante!

Tchauzin!

Primeiro, implemente esse renderer:

public class AuxiliarTableRenderer extends JButton implements TableCellRenderer {

	@Override
	public Component getTableCellRendererComponent(JTable table, Object value,
	        boolean isSelected, boolean hasFocus, int row, int column) {
		Color color = (Color) value;
		if (color != null) {
			setBackground(color);

			return this;
		}
		return null;

	}

}

depois substitua:

  //Set up tool tips for the sport cells.  
         DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();  
         renderer.setToolTipText("Escolha o tipo de horário");  
         tolerancia.setCellRenderer(renderer);  
   

por:

tolerancia.setCellRenderer(new AuxiliarTableRenderer());

e vê se funciona…

abraço!

Isso ae que o Fernando falou…
Só tire o @override
:slight_smile:

Deu certo!!! :lol:

agora preciso entender como funciona o CellEditor

Obrigado.