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

Hercles

jCombobox em jTable numa célula especifica.

Mensagens Recomendadas

Hercles    4
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.