Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Hercles

jCombobox em jTable numa célula especifica.

Mensagens Recomendadas

Hercles

Olá.

Caros, estou com esta dificuldade. Achei alguns códigos prontos na internet para colocar uma combo num jtable, mas estes colocam o combo na coluna todas eu queria somente para uma célula.

A questão é a seguinte, a coluna "zero" vai ter uma combo para "Países" (a combo Pode ficar pra coluna toda), sendo que a coluna "um" vai filtra com o nome do "Pais" e achar os "Portos" existentes para aquele país. Este filtro já é feito perfeitamente no SQL com um método que retorna o Combo.

Achei um código que faz um combobox em células diferente, mas neste código ele cria a jtable. Alguém pode me ajudar a adaptar este código colocando a minha jtable existente?



import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.*;
import java.util.*;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.table.*;
import javax.swing.JTable;
import java.util.ArrayList;
import javax.swing.DefaultCellEditor;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;

public class TableCell extends JFrame
{
 JComboBox comboBox1 = new JComboBox();
 JComboBox comboBox2 = new JComboBox();
 JTable table;

 ArrayList<DefaultCellEditor> editors = new ArrayList<DefaultCellEditor>();

 TableCell()
 {
	  comboBox1.addItem("Tennis");
	  comboBox1.addItem("Fotboll");
	  comboBox1.addItem("Baseball");
	  comboBox1.addItem("Handboll");

	  comboBox2.addItem("USA");
	  comboBox2.addItem("Brazil");
	  comboBox2.addItem("Australia");
	  comboBox2.addItem("China");
	  comboBox2.addItem("Egypt");

	  DefaultCellEditor dce1 = new DefaultCellEditor(comboBox1);
	  DefaultCellEditor dce2 = new DefaultCellEditor(comboBox2);
	  editors.add(dce1);
	  editors.add(dce2);


	  final JTable table = new JTable()
	  { // anonym innerklass
		   private Class editingClass;

		   public TableCellRenderer getCellRenderer(int row, int column)
		   {
				editingClass = null;
				int modelColumn = convertColumnIndexToModel(column);
				int modelRow = convertRowIndexToModel(row);

				if (modelColumn == 1)
				{
					 Class rowClass = getModel().getValueAt(row, modelColumn).getClass();
					 return getDefaultRenderer( rowClass );
				}
				else
					 return super.getCellRenderer(row, column);
		   }

		   public TableCellEditor getCellEditor(int row, int column)
		   {
				editingClass = null;
				int modelColumn = convertColumnIndexToModel(column);
				int modelRow = convertRowIndexToModel(row);

				if (modelColumn == 1)
				{
					 if (modelRow == 5)	 // cell number 5 in column 1 which is going to show the combobox
					 {
						  return (DefaultCellEditor) editors.get(0);
					 }
					 if (modelRow == 6)	 // cell number 6 in column 1 which is going to show the combobox
					 {
						  return (DefaultCellEditor) editors.get(1);
					 }
					 else
					 {
						  editingClass = getModel().getValueAt(modelRow, modelColumn).getClass();
						  return getDefaultEditor( editingClass );
					 }

				}
				else
					 return super.getCellEditor(row, column);
		   }

	  };

	  table.setModel(new javax.swing.table.DefaultTableModel
	  (

		   new Object [][]
		   {
				  {"String", "I'm a string"},
				{"Date", new Date()},
				{"Integer", new Integer(123)},
				{"Double", new Double(123.45)},
				{"Boolean", Boolean.TRUE},
				{"Combobox 1", "COMBOBOX 1"},
				{"Combobox 2", "COMBOBOX 2"}
		   },
		   new String [] { "Attribute", "Data" }
	  ));



	  table.setPreferredScrollableViewportSize(table.getPreferredSize());
	  JScrollPane scrollPane = new JScrollPane( table );
	  getContentPane().add( scrollPane );
 }

 public static void main(String[] args)
 {
	  TableCell frame = new TableCell();
	  frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
	  frame.pack();
	  frame.setLocationRelativeTo( null );
	  frame.setVisible(true);
 }
}


Editado por Hercles

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.