jCheckBox in a Jtable

E

Eefke Gemmeke

Hi all,
i don't manage to set a jCheckBox in a jTable...
Can anyone tell me what's wrong with my code.
Thanks

//******************************************************************
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.lang.*;
import javax.swing.JTable;

public class Sans_titre1 extends JPanel implements TableModelListener {
private final String[] columnNames = { "Rayon", "Produit", "Quantité",
"Acheté"};
private JButton buttonSave;
private JTable table;
private DefaultTableModel tableModel;

//******************************************************************
public Sans_titre1() {
tableModel = new DefaultTableModel(columnNames, 0);

tableModel.addTableModelListener(this);

Object[] data = { new String("Frais"), new String("Pommes"), new
Integer(5), new Boolean(true)};
tableModel.addRow(data);

table = new JTable(tableModel);

javax.swing.table.TableColumn var_col;
var_col = table.getColumnModel().getColumn(3);
JCheckBox check = new JCheckBox();
var_col.setCellEditor(new DefaultCellEditor(check));

JScrollPane scrollPane = new JScrollPane(table);

setLayout(new BorderLayout());
setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
add(BorderLayout.NORTH, new JLabel("Mon panier", JLabel.CENTER));
add(BorderLayout.CENTER, scrollPane);
JButton buttonAdd = new JButton("Ajouter");
buttonAdd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
Object[] data = {
new String("Test"), new String("Test"), new Integer(0),
new Boolean(false)};
tableModel.addRow(data);
}
});
buttonSave = new JButton("Sauver");
buttonSave.setEnabled(false);
buttonSave.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
buttonSave.setEnabled(false);
}
});
JPanel buttonsPanel = new JPanel();
buttonsPanel.add(buttonAdd);
buttonsPanel.add(buttonSave);

add(BorderLayout.SOUTH, buttonsPanel);
setPreferredSize(new Dimension(200, 250));
}

public void tableChanged(TableModelEvent e) {
if (e.getType() == TableModelEvent.UPDATE) {
buttonSave.setEnabled(true);
}
}
//******************************************************************
public static void main(String[] args) {
JFrame frame = new JFrame("Mon Panier");

frame.getContentPane().setLayout(new BorderLayout());

frame.getContentPane().add("Center", new Sans_titre1());

WindowListener wndCloser = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};

frame.addWindowListener(wndCloser);

frame.pack();

frame.show();
}
}
//******************************************************************
 
G

Gregory A. Swarthout

Eefke Gemmeke said:
Hi all,
i don't manage to set a jCheckBox in a jTable...
Can anyone tell me what's wrong with my code.
Thanks

//******************************************************************
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.lang.*;
import javax.swing.JTable;

public class Sans_titre1 extends JPanel implements TableModelListener {
private final String[] columnNames = { "Rayon", "Produit", "Quantité",
"Acheté"};
private JButton buttonSave;
private JTable table;
private DefaultTableModel tableModel;

//******************************************************************
public Sans_titre1() {
tableModel = new DefaultTableModel(columnNames, 0);

tableModel.addTableModelListener(this);

Object[] data = { new String("Frais"), new String("Pommes"), new
Integer(5), new Boolean(true)};
tableModel.addRow(data);

table = new JTable(tableModel);

javax.swing.table.TableColumn var_col;
var_col = table.getColumnModel().getColumn(3);
JCheckBox check = new JCheckBox();
var_col.setCellEditor(new DefaultCellEditor(check));

You've set the JCheckBox as the editor, but you haven't set it as the
renderer.
Add this code here:

var_col.setCellRenderer(new DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row, int
column) {
check.setSelected(((Boolean)value).booleanValue());
return check;
}
});

And you'll need to add "final" to the JCheckBox declaration as
follows:

final JCheckBox check = new JCheckBox();
JScrollPane scrollPane = new JScrollPane(table);

setLayout(new BorderLayout());
setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
add(BorderLayout.NORTH, new JLabel("Mon panier", JLabel.CENTER));
add(BorderLayout.CENTER, scrollPane);
JButton buttonAdd = new JButton("Ajouter");
buttonAdd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
Object[] data = {
new String("Test"), new String("Test"), new Integer(0),
new Boolean(false)};
tableModel.addRow(data);
}
});
buttonSave = new JButton("Sauver");
buttonSave.setEnabled(false);
buttonSave.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
buttonSave.setEnabled(false);
}
});
JPanel buttonsPanel = new JPanel();
buttonsPanel.add(buttonAdd);
buttonsPanel.add(buttonSave);

add(BorderLayout.SOUTH, buttonsPanel);
setPreferredSize(new Dimension(200, 250));
}

public void tableChanged(TableModelEvent e) {
if (e.getType() == TableModelEvent.UPDATE) {
buttonSave.setEnabled(true);
}
}
//******************************************************************
public static void main(String[] args) {
JFrame frame = new JFrame("Mon Panier");

frame.getContentPane().setLayout(new BorderLayout());

frame.getContentPane().add("Center", new Sans_titre1());

WindowListener wndCloser = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};

frame.addWindowListener(wndCloser);

frame.pack();

frame.show();
}
}
//******************************************************************
 
S

Steve W. Jackson

::> Hi all,
:> i don't manage to set a jCheckBox in a jTable...
:> Can anyone tell me what's wrong with my code.
:> Thanks
:>
:> //******************************************************************
:> import java.awt.event.*;
:> import java.awt.*;
:> import javax.swing.*;
:> import javax.swing.event.*;
:> import javax.swing.table.*;
:> import java.lang.*;
:> import javax.swing.JTable;
:>
:> public class Sans_titre1 extends JPanel implements TableModelListener {
:> private final String[] columnNames = { "Rayon", "Produit", "Quantité",
:> "Acheté"};
:> private JButton buttonSave;
:> private JTable table;
:> private DefaultTableModel tableModel;
:>
:> //******************************************************************
:> public Sans_titre1() {
:> tableModel = new DefaultTableModel(columnNames, 0);
:>
:> tableModel.addTableModelListener(this);
:>
:> Object[] data = { new String("Frais"), new String("Pommes"), new
:> Integer(5), new Boolean(true)};
:> tableModel.addRow(data);
:>
:> table = new JTable(tableModel);
:>
:> javax.swing.table.TableColumn var_col;
:> var_col = table.getColumnModel().getColumn(3);
:> JCheckBox check = new JCheckBox();
:> var_col.setCellEditor(new DefaultCellEditor(check));
:
:You've set the JCheckBox as the editor, but you haven't set it as the
:renderer.
:Add this code here:
:
: var_col.setCellRenderer(new DefaultTableCellRenderer() {
: public Component getTableCellRendererComponent(JTable table,
:Object value, boolean isSelected, boolean hasFocus, int row, int
:column) {
: check.setSelected(((Boolean)value).booleanValue());
: return check;
: }
: });
:
:And you'll need to add "final" to the JCheckBox declaration as
:follows:
:
:final JCheckBox check = new JCheckBox();
:
:>
:> JScrollPane scrollPane = new JScrollPane(table);
:>
:> setLayout(new BorderLayout());
:> setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
:> add(BorderLayout.NORTH, new JLabel("Mon panier", JLabel.CENTER));
:> add(BorderLayout.CENTER, scrollPane);
:> JButton buttonAdd = new JButton("Ajouter");
:> buttonAdd.addActionListener(new ActionListener() {
:> public void actionPerformed(ActionEvent ev) {
:> Object[] data = {
:> new String("Test"), new String("Test"), new Integer(0),
:> new Boolean(false)};
:> tableModel.addRow(data);
:> }
:> });
:> buttonSave = new JButton("Sauver");
:> buttonSave.setEnabled(false);
:> buttonSave.addActionListener(new ActionListener() {
:> public void actionPerformed(ActionEvent ev) {
:> buttonSave.setEnabled(false);
:> }
:> });
:> JPanel buttonsPanel = new JPanel();
:> buttonsPanel.add(buttonAdd);
:> buttonsPanel.add(buttonSave);
:>
:> add(BorderLayout.SOUTH, buttonsPanel);
:> setPreferredSize(new Dimension(200, 250));
:> }
:>
:> public void tableChanged(TableModelEvent e) {
:> if (e.getType() == TableModelEvent.UPDATE) {
:> buttonSave.setEnabled(true);
:> }
:> }
:> //******************************************************************
:> public static void main(String[] args) {
:> JFrame frame = new JFrame("Mon Panier");
:>
:> frame.getContentPane().setLayout(new BorderLayout());
:>
:> frame.getContentPane().add("Center", new Sans_titre1());
:>
:> WindowListener wndCloser = new WindowAdapter() {
:> public void windowClosing(WindowEvent e) {
:> System.exit(0);
:> }
:> };
:>
:> frame.addWindowListener(wndCloser);
:>
:> frame.pack();
:>
:> frame.show();
:> }
:> }
:> //******************************************************************
:>
:>
:>
:> ---
:> Outgoing mail is certified Virus Free.
:> Checked by AVG anti-virus system (http://www.grisoft.com).
:> Version: 6.0.552 / Virus Database: 344 - Release Date: 15/12/2003

Perhaps I'm not understanding something about the intent here. Why set
a cell editor at all for a Boolean object? By default, when you put a
Boolean object into a JTable cell, the default editor will be a checkbox.

= Steve =
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,431
Messages
2,571,679
Members
48,796
Latest member
Greg L.

Latest Threads

Top