Criar um JComboBox de cores

14 respostas
furacao123

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

14 Respostas

Shelson

eh isso que vc estah procurando ?

Color ComboBox: ComboBoxEditor Demo

furacao123

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??

Shelson

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

lina

Oi,

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

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) {}  
}

Tchauzin!

Shelson

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

furacao123

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

// 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 &lt; values.length; r++) {
            for (int g = 0; g &lt; values.length; g++) {
                for (int b = 0; b &lt; 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(&quot;Escolha o tipo de horário&quot;);
        tolerancia.setCellRenderer(renderer);
    }

seto a coluna q eu quero q receba esse renderer

GeraComboBox(horario, horario.getColumnModel().getColumn(2));

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

wellington7

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

wellington7

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

furacao123

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

furacao123

Aqui esta o Codigo do meu form q mostra a tabela

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
}

Aqui a classe ColorComboRenderer

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 &lt; values.length; r++)
      for (int g = 0; g &lt; values.length; g++)
        for (int b = 0; b &lt; values.length; b++) {
          Color c = new Color(values[r], values[g], values[b]);
          cbColor.addItem(c);
        }
    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();

  }
}
lina

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

Vai ver é o mesmo =)

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

Tchauzin!

Fernando_Generoso_da

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!

wellington7

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

furacao123

Deu certo!!! :lol:

agora preciso entender como funciona o CellEditor

Obrigado.

Criado 17 de dezembro de 2008
Ultima resposta 6 de jan. de 2009
Respostas 14
Participantes 5