Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

JCheckBox dans JTable

3 réponses
Avatar
Eefke Gemmeke
Bonjour à tous,
Petit question d'au pauvre newbie.
Je n'arrive pas à placer un CheckBox dans mon jTable...et je ne trouve
aucune réponse dans les archives du forum.
Quelqu'un aurait il la gentillesse de regarder mon code pour me dire ou se
trouve l'erreur?

Merci bien

//******************************************************************
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();
}
}
//******************************************************************


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.516 / Virus Database: 313 - Release Date: 01/09/2003

3 réponses

Avatar
Ulrich Vachon
En effet, tu utilises le modèle par défaut. Le mieux est de passer par un
modèle pero qui hérite de "AbstractTableModel" qui fera office "d'interface"
entre la JTable et ta structure de données.

Tiens : http://www.csie.ntu.edu.tw/~b7506051/docs/Swing/Chapter18html/
Regarde le chap "18.8 Custom models, editors, and renderers"

Bon courage,
Ulrich.


"Eefke Gemmeke" a écrit dans le message
de news: anlDb.10252$
Bonjour à tous,
Petit question d'au pauvre newbie.
Je n'arrive pas à placer un CheckBox dans mon jTable...et je ne trouve
aucune réponse dans les archives du forum.
Quelqu'un aurait il la gentillesse de regarder mon code pour me dire ou se
trouve l'erreur?

Merci bien

//******************************************************************
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();
}
}
//******************************************************************


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.516 / Virus Database: 313 - Release Date: 01/09/2003




Avatar
Poulpophile
"Eefke Gemmeke" a écrit:
Bonjour à tous,
Petit question d'au pauvre newbie.
Je n'arrive pas à placer un CheckBox dans mon jTable...et je ne trouve
aucune réponse dans les archives du forum.


Un lien intéressant :
http://www2.gol.com/users/tame/swing/examples/JTableExamples2.html

Fabrice.

Avatar
Olivier Pierrier
Salut,

Ulrich Vachon wrote:

En effet, tu utilises le modèle par défaut. Le mieux est de passer par un
modèle pero qui hérite de "AbstractTableModel" qui fera office "d'interface"
entre la JTable et ta structure de données.


Utiliser le modele par default n'est pas le probleme ici, il ne faut pas
confondre les donnees et leur affichage.

quelque chose comme :

table.setDefaultRenderer( Boolean.class, new MyBooleanRenderer() );

serait plus efficace.

avec MybooleanRenderer extends DefaultTableRenderer ...

Olivier.