Un jTable avec une colonne jCheckBox

RouRa22 Messages postés 28 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 19 octobre 2009 - 17 nov. 2008 à 11:14
RouRa22 Messages postés 28 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 19 octobre 2009 - 13 juin 2009 à 12:33
Salut,

Je suis en train de developper une application java avec NetBeans et la bibliothèque Swing.


j'ai besoin d'une jTable qui soit rempli à partir de la base de données

avec un colonne de type jcheckBox.

Dans les proprietés de mon jTable la 6éme colonne (de type jChekBox) Model type j'ai choisi Boolean


Voici mon code

Code :
publicclass MyTableContactModel extends AbstractTableModel{
 

privateint colnum=6;
privateint rownum;
 
private ArrayList<String[]> ResultSets;
private String[] columnNames ={
"codecontact","nom","prenom","ville","pays"};

public MyTableContactModel(ResultSet rs){

ResultSets=new ArrayList<String[]>();

try{
while(rs.next()){

String[] row={
rs.getString("codecontact"), rs.getString("prenom"),rs.getString("nom"),rs.getString("ville"),rs.getString("pays")
};

ResultSets.add(row);
}
}
catch(Exception e){
System.out.println("Exception in MyTableContactModel");
}

}

 
publicClass getColumnClass(int c){
return getValueAt(0, c).getClass();
}
 
publicint getColumnCount()
{
return columnNames.length;
}
 
public String getColumnName(int col)
{
return columnNames[col];
}
public Object getValueAt(int rowindex, int columnindex)
{
String[] row=ResultSets.get(rowindex);
return row[columnindex];
}
 
publicboolean isCellEditable(int row, int col)
{
if(col < 2)
{
returnfalse;
}
else
{
returntrue;
}
}
publicvoid setValueAt(Object value, int row, int col)
{
// data[row][col] = value;
fireTableCellUpdated(row, col);
}
 
@Override
publicint getRowCount(){
return ResultSets.size();
}
}
 
 

et dans le CustomizeCode j'ai ecris

Code :
private ResultSet getResultFromContactClient(){
ResultSet rs=null;
try{
rs= (ResultSet) stmt.executeQuery("select codecontact, prenom, nom, ville, pays from contact ");
}
catch(SQLException e){}
return rs;
}
ResultSet rs=getResultFromContactClient();
jTableContactClient.setModel(new MyTableContactModel(rs));
 

Malheureusement, dans l'affichage j'obtient un jtable avec seulement 5 colonnes(pas de ChekBox) remplis de la base de données


Si je supprime le code dans Customizecode

j'obtient un jTable vide mais avec un jCheckBox.

Où est le problème???

Mercii d'avance.

9 réponses

uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
18 nov. 2008 à 08:49
Ton TableModel contient cinq colonnes. Pour en sortir six, il n'y pas de truc magique: nous devons prévoir toutes les colonnes dans le modéle.
0
RouRa22 Messages postés 28 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 19 octobre 2009
18 nov. 2008 à 09:41
Donc comment insérer la 6éme colonne dans le modèle , sachant que les 5 colonnes sont remplis à partir de la base de données???
Merci d'avance.
0
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
18 nov. 2008 à 10:46
Nous pouvons définir une colonne supplémentaire de la même manière que les autres. Le fait qu'elle aura une valeur programmée ne devrait pas être un problème.
0
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
18 nov. 2008 à 11:26
Nous ajoutons un nom dans les columnNames, p.ex. "check".
Comme valeur dans la "row" nous mettons p.ex. Boolean.FALSE.
Un bouléen n'étant pas une chaine, nous pouvons changer le type <String[]> vers <Object[]>.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
RouRa22 Messages postés 28 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 19 octobre 2009
18 nov. 2008 à 14:16
Même problème,
mais dans la méthode getResultFromContactClient() je charge que les 5 premières colonnes puisque leurs valeurs sont à pertir de la Base de données.
C'est quoi la solution?
0
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
18 nov. 2008 à 16:33
On s'en fiche du ResultSet. Nous mettons notre booléen où il le faut, et voilà.

/*
 * MyTableContactModel.java
 */
import java.sql.*;
import java.util.*;
import javax.swing.table.*;
public class MyTableContactModel extends AbstractTableModel {
    private ArrayList<Object[]> resultSets;
    private String[] columnNames = {
        "codecontact", "nom", "prenom", "ville", "pays", "check"
    };
    public MyTableContactModel(ResultSet rs) {
        resultSets = new ArrayList<Object[]>();
        try {
            while (rs.next()) {
                Object[] row = {
                    rs.getString("codecontact"), rs.getString("prenom"),
                    rs.getString("nom"), rs.getString("ville"),
                    rs.getString("pays"), Boolean.FALSE
                };

                resultSets.add(row);
            }
        } catch (Exception e) {
            System.out.println("Exception in MyTableContactModel");
        }
    }
    @Override
    public Class getColumnClass(final int column) {
        return getValueAt(0, column).getClass();
    }
    public int getColumnCount() {
        return columnNames.length;
    }
    @Override
    public String getColumnName(final int column) {
        return columnNames[column];
    }
    public Object getValueAt(final int rowindex, final int columnindex) {
        Object[] row = resultSets.get(rowindex);
        return row[columnindex];
    }
    @Override
    public boolean isCellEditable(final int row, final int column) {
        if (column < 2) {
            return false;
        } else {
            return true;
        }
    }
    @Override
    public void setValueAt(final Object value, final int row, final int column) {
        resultSets.get(row)[column] = value;
        fireTableCellUpdated(row, column);
    }
    @Override
    public int getRowCount() {
        return resultSets.size();
    }
}
0
RouRa22 Messages postés 28 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 19 octobre 2009
19 nov. 2008 à 12:35
Merci bien, c'est résolu
0
RouRa22 Messages postés 28 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 19 octobre 2009
20 nov. 2008 à 17:10
Maintenant je veux que la colonne soit une colonne de button radio
Comment faire ça ?sachant que je travaille avec netBeans et swing.
Pour la jCheckBox j'ai fais properties model et j'ai choisi comme type de colonne Boolean.
Comment pour le button radio?
Merci d'avance.
0
RouRa22 Messages postés 28 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 19 octobre 2009
13 juin 2009 à 12:33
Salut, merci j'ai réussi d'intégrer une colonne avec un jCheckBox dans un jTable.
Mon problème est le suivant:
J'ai un jComboBox selon sa valeur ma jTable change de valeurs(remplissage à partir de la BD).
Si ma jTable est vide, cette exception s'affiche sur le consol:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at partie_depenses_aux_vehicules.partie_vidange.ListeVidangesModel.getColumnClass(ListeVidangesModel.java:63)
        at javax.swing.JTable.getColumnClass(JTable.java:2620)
        at javax.swing.JTable.getCellRenderer(JTable.java:5621)
        at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2071)
        at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974)
        at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1770)
        at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
        at javax.swing.JComponent.paintComponent(JComponent.java:763)
        at javax.swing.JComponent.paint(JComponent.java:1027)
        at javax.swing.JComponent.paintChildren(JComponent.java:864)
        at javax.swing.JComponent.paint(JComponent.java:1036)
        at javax.swing.JViewport.paint(JViewport.java:747)
        at javax.swing.JComponent.paintChildren(JComponent.java:864)
        at javax.swing.JComponent.paint(JComponent.java:1036)
        at javax.swing.JComponent.paintChildren(JComponent.java:864)
        at javax.swing.JSplitPane.paintChildren(JSplitPane.java:1026)
        at javax.swing.JComponent.paint(JComponent.java:1036)
        at javax.swing.JComponent.paintChildren(JComponent.java:864)
        at javax.swing.JComponent.paint(JComponent.java:1036)
        at javax.swing.JComponent.paintChildren(JComponent.java:864)
        at javax.swing.JComponent.paint(JComponent.java:1036)
        at javax.swing.JComponent.paintChildren(JComponent.java:864)
        at javax.swing.JComponent.paint(JComponent.java:1036)
        at javax.swing.JComponent.paintChildren(JComponent.java:864)
        at javax.swing.JComponent.paint(JComponent.java:1036)
        at javax.swing.JComponent.paintChildren(JComponent.java:864)
        at javax.swing.JSplitPane.paintChildren(JSplitPane.java:1026)
        at javax.swing.JComponent.paint(JComponent.java:1036)
        at javax.swing.JComponent.paintChildren(JComponent.java:864)
        at javax.swing.JSplitPane.paintChildren(JSplitPane.java:1026)
        at javax.swing.JComponent.paint(JComponent.java:1036)
        at javax.swing.JComponent.paintChildren(JComponent.java:864)
        at javax.swing.JComponent.paint(JComponent.java:1036)
        at javax.swing.JComponent.paintChildren(JComponent.java:864)
        at javax.swing.JComponent.paint(JComponent.java:1036)
        at javax.swing.JLayeredPane.paint(JLayeredPane.java:564)
        at javax.swing.JComponent.paintChildren(JComponent.java:864)
        at javax.swing.JComponent.paint(JComponent.java:1036)
        at javax.swing.JComponent.paintToOffscreen(JComponent.java:5122)
        at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1382)
        at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1313)
        at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:301)
        at javax.swing.RepaintManager.paint(RepaintManager.java:1128)
        at javax.swing.JComponent._paintImmediately(JComponent.java:5070)
        at javax.swing.JComponent.paintImmediately(JComponent.java:4880)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:723)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:679)
        at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:659)
        at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Voici mon code:
public class ListeVidangesModel extends AbstractTableModel {
   private int colnum=6;
    private int rownum;
    private String[] columnNames={
        "Réf. vidange","Immatriculation","Date vidange","Date de l'alerte","Kilo. alerte", "Effectuée"
    };
    private  ArrayList<Object[]> ResultSets;
.....
    public ListeVidangesModel(ResultSet rs) {
public Class getColumnClass(int c)
{
    return getValueAt(0, c).getClass();//Ici l'erreur
}
0
Rejoignez-nous