Como incluir CheckBox em uma Linha JTable?

Como incluir CheckBox em uma linha com N Colunas ?

assim, inclui CheckBox em uma coluna :

TableColumn sportColumn = jtblDB.getColumnModel().getColumn(1);

JCheckBox ckbTeste = new JCheckBox("Teste",true);

sportColumn.setCellEditor(new DefaultCellEditor(ckbTeste));

Como incluir na linha ?

Obrigado !
[]´s

Ola,

Qdo vc criar a sua JTable:

JTable myTable = new JTable() {
 public TableCellRenderer getCellRenderer(int row, int column) {
   if (row == 0) {
     getDefaultRenderer(Boolean.class);
   } else {
      return super.getCellRenderer(int row, int column);
   }
 }

};

[]'s

Ola de novo,

Observação, como vc não disse qual linha, eu fiz apenas para a primeira.

[]'s

em todas as linha de uma Coluna… a JTable não tem tamanho definido, ela é instanciada com tamanhos diferentes …

…[]´s

Bom,

Então vc deve usar o TableModel e retornar Boolean.class para todos os valores da coluna que vc quer.

Não consigo ver qual é o problema. Os exemplos do tutorial cobem o uso de check boxes.

[]'s

Valeu velho !

[]´s

Bom,

Como eu ainda não entendi direito exatamente o q vc quer. Vou colocar um exemplo, talvez te ajude:

/*
 * Copyright 2002 Sun Microsystems, Inc. All rights reserved.
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */

/**
 * An example showing the JTable with a dataModel that is not derived
 * from a database. We add the optional TableSorter object to give the
 * JTable the ability to sort.
 *
 * @version 1.3 10/14/97
 * @author Philip Milne
 */
import java.awt.Dimension;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;


/**
 *
 *
 * @author Last modified by $Author$
 * @version $Revision$
 */
public class TableExample3
{
	/**
	 * Creates a new TableExample3 object.
	 */
	public TableExample3()
	{
		JFrame frame = new JFrame("Table");

		frame.addWindowListener(new WindowAdapter() {
				public void windowClosing(WindowEvent e)
				{
					System.exit(0);
				}
			});

		// Take the dummy data from SwingSet.
		final String[] names = {
			"First Name", "Last Name", "Favorite Color", "Favorite Number", "Vegetarian"
		};
		final Object[][] data = {
			{ "Richard", "Java", "Green", new Integer(7), new Boolean(true) },
			{ "Tom", "Ball", "Blue", new Integer(99), new Boolean(false) },
			{ "Alan", "Chung", "Green", new Integer(838), new Boolean(false) },
			{ "Jeff", "Dinkins", "Turquois", new Integer(8), new Boolean(true) },
			{ "Amy", "Fowler", "Yellow", new Integer(3), new Boolean(false) },
			{ "Brian", "Gerhold", "Green", new Integer(0), new Boolean(false) },
			{ "James", "Gosling", "Pink", new Integer(21), new Boolean(false) },
			{ "David", "Karlton", "Red", new Integer(1), new Boolean(false) },
			{ "Dave", "Kloba", "Yellow", new Integer(14), new Boolean(false) },
			{ "Peter", "Korn", "Purple", new Integer(12), new Boolean(false) },
			{ "Phil", "Milne", "Purple", new Integer(3), new Boolean(false) },
			{ "Dave", "Moore", "Green", new Integer(88), new Boolean(false) },
			{ "Hans", "Muller", "Maroon", new Integer(5), new Boolean(false) },
			{ "Rick", "Levenson", "Blue", new Integer(2), new Boolean(false) },
			{ "Tim", "Prinzing", "Blue", new Integer(22), new Boolean(false) },
			{ "Chester", "Rose", "Black", new Integer(0), new Boolean(false) },
			{ "Ray", "Ryan", "Gray", new Integer(77), new Boolean(false) },
			{ "Georges", "Saab", "Red", new Integer(4), new Boolean(false) },
			{ "Willie", "Walker", "Phthalo Blue", new Integer(4), new Boolean(false) },
			{ "Kathy", "Walrath", "Blue", new Integer(8), new Boolean(false) },
			{ "Arnaud", "Weber", "Green", new Integer(44), new Boolean(false) }
		};

		// Create a model of the data.
		TableModel dataModel = new AbstractTableModel() {
				// These methods always need to be implemented.
				public int getColumnCount()
				{
					return names.length;
				}

				public int getRowCount()
				{
					return data.length;
				}

				public Object getValueAt(int row, int col)
				{
					return data[row][col];
				}

				// The default implementations of these methods in
				// AbstractTableModel would work, but we can refine them.
				public String getColumnName(int column)
				{
					return names[column];
				}

				public Class getColumnClass(int col)
				{
					return getValueAt(0, col).getClass();
				}

				public boolean isCellEditable(int row, int col)
				{
					return (col == 4);
				}

				public void setValueAt(Object aValue, int row, int column)
				{
					data[row][column] = aValue;
				}
			};

		// Instead of making the table display the data as it would normally with:
		// JTable tableView = new JTable(dataModel);
		// Add a sorter, by using the following three lines instead of the one above.
		TableSorter sorter = new TableSorter(dataModel);
		JTable tableView = new JTable(sorter);
		sorter.addMouseListenerToHeaderInTable(tableView);

		JScrollPane scrollpane = new JScrollPane(tableView);

		scrollpane.setPreferredSize(new Dimension(700, 300));
		frame.getContentPane().add(scrollpane);
		frame.pack();
		frame.setVisible(true);
	}

	/**
	 *
	 *
	 * @param args
	 */
	public static void main(String[] args)
	{
		new TableExample3();
	}
}

[]'s

Correção do código previamente colocado :

JTable myTable = new JTable() {
public TableCellRenderer getCellRenderer(int row, int column) {
   if (row == 0) {
     getDefaultRenderer(Boolean.class);
   } else {
      return super.getCellRenderer(row, column);
   }
}

}; 

Nesse caso o método getColumnClass do TableModel tem que retornar sempre Object.class.

[]'s

existe erro no codigo …

[]´s

Caro nardo:

Converse com o pessoal da Equipe Java de onde vc trabalha que existe disponivel um exemplo que faz exatamente o que vc quer…dá uma perguntada lá ok??

ate mais…

Ola,

Legal a mensagem, existe erro no código… e ?? onde ? To tentando ajudar mas não vou programar pra vc. Certo !?

[]'s

mlopes,

Voce não vai programar pra mim, porem estou com dificuldades com o checkBox, obrigado pela sua boa vontade ! ja vou te mandar o erro…

Richard,
se voce tem a resposta, por favor poste-a, com o codigo, pois minha duvida,pode ser tambem de outras pessoas.

[]´s


erro :TableCellRenderer cannot be resolved(or is not a valid return type)for the method getCellRenderer

jtblDB = new JTable(3, vetAux.size())
{
/*erro nesta linha*/public TableCellRenderer getCellRenderer(int row, int column) {
    if (row == 0) {
	getDefaultRenderer(Boolean.class);
	}
	else {
	return super.getCellRenderer(row, column);
	}
    }
};

Ai vai:

		JTable myTable = new JTable() {
		public TableCellRenderer getCellRenderer(int row, int column) {
		   if (row == 0) {
			 return getDefaultRenderer(Boolean.class);
		   } else {
			  return super.getCellRenderer(row, column);
		   }
		}

		};

Não esqueça de importar:

import javax.swing.table.TableCellRenderer;

Agora, por acaso a sua tabela só tem boolean ? Como exatamente seria ela ? Exemplo:

Header 1 | Header 2 | Header 3

Boolean | Boolean | Boolean
Boolean | Boolean | Boolean

[]'s

e ae ?

A Jtable não tem um tamanho pre-definido,é uma tabela dinamica, que é instanciada e removida a cada ação do usuario em um combo, o componente é instanciado e removido a todo momento.Porem a JTable tem algumas estruturas fixas.

| titulo- 1A | ttitulo - 2B | titulo - 3C | Titulo -N

Dados Dados Dados Dados -N

Boolean Boolean Boolean Boolean -N

…Obrigado.

[]´s

aeeeeeeeeeeeeeee…

Beleza ! mlopes… deu certo ! obrigado !

porem não esta sendo possivel checar os checkBox…

Muito Obrigado !
[]´s

Exemplo em 3 replies:

package com.mlopes.examples.swing;

import java.awt.Component;

import java.util.EventObject;

import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.CellEditorListener;

import javax.swing.table.TableCellEditor;


public class MultiEditor
	implements TableCellEditor
{
	
	private static final int COMBO = 0;	
	private static final int BOOLEAN = 1;	
	private static final int STRING = 2;	
	private static final int NUM_EDITOR = 3;	
	JComboBox comboBox;	
	DefaultCellEditor[] cellEditors;	
	int flg;

	public MultiEditor()
	{
		cellEditors = new DefaultCellEditor[NUM_EDITOR];
		comboBox = new JComboBox();
		comboBox.addItem("true");
		comboBox.addItem("false");
		cellEditors[COMBO] = new DefaultCellEditor(comboBox);

		JCheckBox checkBox = new JCheckBox();

		//checkBox.setOpaque( true );
		checkBox.setHorizontalAlignment(JLabel.CENTER);
		cellEditors[BOOLEAN] = new DefaultCellEditor(checkBox);

		JTextField textField = new JTextField();
		cellEditors[STRING] = new DefaultCellEditor(textField);
		flg = NUM_EDITOR;    // nobody
	}


	public boolean isCellEditable(EventObject anEvent)
	{
		if (flg == NUM_EDITOR) {
			return true;
		}
		return cellEditors[flg].isCellEditable(anEvent);
	}


	public Object getCellEditorValue()
	{
		switch (flg) {
		case COMBO:

			String str = (String)comboBox.getSelectedItem();

			return new ComboString(str);
		case BOOLEAN:
		case STRING:
			return cellEditors[flg].getCellEditorValue();
		default:
			return null;
		}
	}


	public void setClickCountToStart(int n)
	{
		cellEditors[flg].setClickCountToStart(n);
	}


	public int getClickCountToStart()
	{
		return cellEditors[flg].getClickCountToStart();
	}


	public Component getComponent()
	{
		return cellEditors[flg].getComponent();
	}


	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
	    int row, int column)
	{
		if (value instanceof ComboString) {    // ComboString
			flg = COMBO;

			String str = (value == null) ? "" : value.toString();

			return cellEditors[COMBO].getTableCellEditorComponent(table, str, isSelected, row,
			    column);
		} else if (value instanceof Boolean) {    // Boolean
			flg = BOOLEAN;

			return cellEditors[BOOLEAN].getTableCellEditorComponent(table, value, isSelected, row,
			    column);
		} else if (value instanceof String) {    // String
			flg = STRING;

			return cellEditors[STRING].getTableCellEditorComponent(table, value, isSelected, row,
			    column);
		}

		return null;
	}


	public void addCellEditorListener(CellEditorListener l)
	{
		cellEditors[flg].addCellEditorListener(l);
	}


	public void cancelCellEditing()
	{
		cellEditors[flg].cancelCellEditing();
	}


	public void removeCellEditorListener(CellEditorListener l)
	{
		cellEditors[flg].removeCellEditorListener(l);
	}


	public boolean shouldSelectCell(EventObject anEvent)
	{
		return cellEditors[flg].shouldSelectCell(anEvent);
	}


	public boolean stopCellEditing()
	{
		return cellEditors[flg].stopCellEditing();
	}
}
package com.mlopes.examples.swing;


/* (swing1.1beta3) */

//package jp.gr.java_conf.tame.swing.examples;
import java.awt.*;

import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.*;

/**
 * <todo> mlopes: DOCUMENT ME!
 *
 * @author Last modified by $Author$
 * @version $Revision$
 */
public class MultiCellRenderer
	extends DefaultTableCellRenderer
{
	/** <todo> mlopes: DOCUMENT ME! */
	JCheckBox checkBox = new JCheckBox();

	/**
	 * <todo> mlopes: DOCUMENT ME!
	 *
	 * @param table <todo> mlopes: DOCUMENT ME!
	 * @param value <todo> mlopes: DOCUMENT ME!
	 * @param isSelected <todo> mlopes: DOCUMENT ME!
	 * @param hasFocus <todo> mlopes: DOCUMENT ME!
	 * @param row <todo> mlopes: DOCUMENT ME!
	 * @param column <todo> mlopes: DOCUMENT ME!
	 *
	 * @return <todo> mlopes: DOCUMENT ME!
	 */
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
	    boolean hasFocus, int row, int column)
	{
		if (value instanceof Boolean) {    // Boolean
			checkBox.setSelected(((Boolean)value).booleanValue());
			checkBox.setHorizontalAlignment(JLabel.CENTER);

			return checkBox;
		}

		String str = (value == null) ? "" : value.toString();

		return super.getTableCellRendererComponent(table, str, isSelected, hasFocus, row, column);
	}
}
package com.mlopes.examples.swing;

import java.awt.Component;

import java.util.EventObject;

import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.CellEditorListener;

import javax.swing.table.TableCellEditor;


public class MultiEditor
	implements TableCellEditor
{
	
	private static final int COMBO = 0;	
	private static final int BOOLEAN = 1;	
	private static final int STRING = 2;	
	private static final int NUM_EDITOR = 3;	
	JComboBox comboBox;	
	DefaultCellEditor[] cellEditors;	
	int flg;

	public MultiEditor()
	{
		cellEditors = new DefaultCellEditor[NUM_EDITOR];
		comboBox = new JComboBox();
		comboBox.addItem("true");
		comboBox.addItem("false");
		cellEditors[COMBO] = new DefaultCellEditor(comboBox);

		JCheckBox checkBox = new JCheckBox();

		//checkBox.setOpaque( true );
		checkBox.setHorizontalAlignment(JLabel.CENTER);
		cellEditors[BOOLEAN] = new DefaultCellEditor(checkBox);

		JTextField textField = new JTextField();
		cellEditors[STRING] = new DefaultCellEditor(textField);
		flg = NUM_EDITOR;    // nobody
	}


	public boolean isCellEditable(EventObject anEvent)
	{
		if (flg == NUM_EDITOR) {
			return true;
		}
		return cellEditors[flg].isCellEditable(anEvent);
	}


	public Object getCellEditorValue()
	{
		switch (flg) {
		case COMBO:

			String str = (String)comboBox.getSelectedItem();

			return new ComboString(str);
		case BOOLEAN:
		case STRING:
			return cellEditors[flg].getCellEditorValue();
		default:
			return null;
		}
	}


	public void setClickCountToStart(int n)
	{
		cellEditors[flg].setClickCountToStart(n);
	}


	public int getClickCountToStart()
	{
		return cellEditors[flg].getClickCountToStart();
	}


	public Component getComponent()
	{
		return cellEditors[flg].getComponent();
	}


	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
	    int row, int column)
	{
		if (value instanceof ComboString) {    // ComboString
			flg = COMBO;

			String str = (value == null) ? "" : value.toString();

			return cellEditors[COMBO].getTableCellEditorComponent(table, str, isSelected, row,
			    column);
		} else if (value instanceof Boolean) {    // Boolean
			flg = BOOLEAN;

			return cellEditors[BOOLEAN].getTableCellEditorComponent(table, value, isSelected, row,
			    column);
		} else if (value instanceof String) {    // String
			flg = STRING;

			return cellEditors[STRING].getTableCellEditorComponent(table, value, isSelected, row,
			    column);
		}

		return null;
	}


	public void addCellEditorListener(CellEditorListener l)
	{
		cellEditors[flg].addCellEditorListener(l);
	}


	public void cancelCellEditing()
	{
		cellEditors[flg].cancelCellEditing();
	}


	public void removeCellEditorListener(CellEditorListener l)
	{
		cellEditors[flg].removeCellEditorListener(l);
	}


	public boolean shouldSelectCell(EventObject anEvent)
	{
		return cellEditors[flg].shouldSelectCell(anEvent);
	}


	public boolean stopCellEditing()
	{
		return cellEditors[flg].stopCellEditing();
	}
}
package com.mlopes.examples.swing;


class ComboString
{
	/** <todo> mlopes: DOCUMENT ME! */
	String str;

	/**
	 * Creates a new ComboString object.
	 *
	 * @param str <todo> mlopes: DOCUMENT ME!
	 */
	ComboString(String str)
	{
		this.str = str;
	}

	/**
	 * <todo> mlopes: DOCUMENT ME!
	 *
	 * @return <todo> mlopes: DOCUMENT ME!
	 */
	public String toString()
	{
		return str;
	}
}

Ufa,

Agora pra rodar:

package com.mlopes.examples.swing;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import javax.swing.table.DefaultTableModel;


/**
 * <todo> mlopes: DOCUMENT ME!
 *
 * @author Last modified by $Author$
 * @version $Revision$
 */
public class MultiComponentTable
	extends JFrame
{
	/**
	 * Creates a new MultiComponentTable object.
	 */
	public MultiComponentTable()
	{
		super("MultiComponent Table");

		DefaultTableModel dm = new DefaultTableModel() {
				public boolean isCellEditable(int row, int column)
				{
					if (column == 0) {
						return true;
					}

					return false;
				}
			};

		dm.setDataVector(new Object[][] {
			    { new ComboString("true"), "ComboString", "JLabel", "JComboBox" },
			    { new ComboString("false"), "ComboString", "JLabel", "JComboBox" },
			    { new Boolean(true), "Boolean", "JCheckBox", "JCheckBox" },
			    { new Boolean(false), "Boolean", "JCheckBox", "JCheckBox" },
			    { "true", "String", "JLabel", "JTextField" },
			    { "false", "String", "JLabel", "JTextField" }
		    }, new Object[] { "Component", "Data", "Renderer", "Editor" });

		JTable table = new JTable(dm);
		table.getColumn("Component").setCellRenderer(new MultiCellRenderer());
		table.getColumn("Component").setCellEditor(new MultiEditor());

		JScrollPane scroll = new JScrollPane(table);
		getContentPane().add(scroll);
		setSize(400, 160);
		setVisible(true);
	}

	/**
	 * <todo> mlopes: DOCUMENT ME!
	 *
	 * @param args <todo> mlopes: DOCUMENT ME!
	 */
	public static void main(String[] args)
	{
		MultiComponentTable frame = new MultiComponentTable();
		frame.addWindowListener(new WindowAdapter() {
				public void windowClosing(WindowEvent e)
				{
					System.exit(0);
				}
			});
	}
}

[]'s