IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Est-il possible de mettre un JPanel dans une colonne d'un JTable ?


Sujet :

Composants Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Est-il possible de mettre un JPanel dans une colonne d'un JTable ?
    Bonjour,

    J'ai fait un JPanel et je l'a mis dans une colonne JTable. Le résultat n'est pas celui attendu. En fait j'attends que ma colonne soit remplis par un groupe bouton radio mais dans la colonne je trouve le code que j'ai écrit dans le JPanel. Comment puis-je corriger cette erreur?

    NB: la 1ere colonne appelle le contenu d'une base de donnée Access et la 2eme contient des boutons radios.

    Merci pour votre aide
    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.Vector;
     
    import javax.swing.JOptionPane;
     
    import Structure.StructureMehari;
    import Structure.StructureMehariuser;
    import auditorg_int.rbt;
     
    public class Manip_Data_Base {
    	//emplacement de la base
    	final String NOM_BDD ="bd/annuaire.mdb";
    	//nom d'utilisateur
    	final String NOM_USER="";
    	//mot de passe
    	final String MP_USER="";
    	//chaine de connexion
    	String DBurl="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+NOM_BDD;
    	Connection con;
    	public Manip_Data_Base() {
    		Connection();
    	}
     
     
     
    	//permet d'effectuer une connection à la base
    	public boolean Connection() {
    		try{
    			System.out.println("1");
    			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    			System.out.println("2");
    			con = (Connection) DriverManager.getConnection(DBurl,NOM_USER,MP_USER);
    			System.out.println("3");
    			return true;
    		}catch(Exception e){
    			JOptionPane.showMessageDialog(null,"Impossible de charger le pilote");
    		}
    		return false;
    	}
    	//remplissage de la table de l'administrateur
    	public Vector<StructureMehari> Remplir(){
    		Vector<StructureMehari> v = new Vector<StructureMehari>();
    		try {
    			Statement stmnt = con.createStatement();
    			ResultSet res = stmnt.executeQuery("select Question , coef from Mehari");
    			while(res.next()){
    				v.add(new StructureMehari(res.getString(1),res.getInt(2)));
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return v;
    	}
     
    //remplissage du tableau du client
    	public Vector<StructureMehariuser> Rempliruser(){
    		rbt r=new rbt();
    		Vector<StructureMehariuser> v = new Vector<StructureMehariuser>();
    		try {
    			Statement stmnt = con.createStatement();
    			ResultSet res = stmnt.executeQuery("select Question from Mehari");
     
    			while(res.next()){
    				v.add(new StructureMehariuser(res.getString(1),r));
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return v;
    	}
     
    	//lancer une requète
    	public boolean LancerRequete(String req){
    		try {
    			Statement stmnt = con.createStatement();
    			stmnt.executeUpdate(req);
    			return true;
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return false;
    	}
     
    }

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Il faut utiliser le concept de Renderer/Editor, qui est la façon correcte de modifier l'apparence et la méthode d'édition d'une cellule du composant JTable.


    Cf le tuto de Baptiste Wicht ici même: http://baptiste-wicht.developpez.com.../swing/jtable/
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    en fait ma 2eme class qui contient le renderer est prète le problème ici comment j'appel ma class
    NB que la 1er colonne appel le contenue d'une base de donnée et la 2ème colonne doit contenir le groupe radiobutton
    SVP j'ai visité plusieurs tuto comme celle que vous avez mis mais pas de solution !!!!
    voici le code du bouton radio qui contient le renderer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    package auditorg_int;
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.*;
    import javax.swing.event.*;
     
    /**
     * @version 1.2 08/13/99
     */
    public class JRadioButtonTableExample2 extends JPanel {
     
      public JRadioButtonTableExample2(){
     
     
        DefaultTableModel dm = new DefaultTableModel();
        dm.setDataVector(
          new Object[][]{
            {"1",new Integer(-1)}},
          new Object[]{"Answer"});
     
        JTable table = new JTable(dm);
        String[] answer = {"0","1","2","3","4"};
     
        table.getColumn("Answer").setCellRenderer(
          new RadioButtonRenderer(answer)
        );
        table.getColumn("Answer").setCellEditor(
          new RadioButtonEditor(new JCheckBox(), 
                                new RadioButtonPanel(answer))
        );
        JScrollPane scroll = new JScrollPane(table);
        this.add( scroll );
      }
     
      // Cell base
      class RadioButtonPanel extends JPanel {
        JRadioButton[] buttons;
     
        RadioButtonPanel(String[] str) {
          setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
          buttons = new JRadioButton[str.length];
          for (int i=0; i<buttons.length; i++) {
            buttons[i] = new JRadioButton(str[i]);
            buttons[i].setFocusPainted(false);
            add(buttons[i]);
          }      
        }
     
        public void setSelectedIndex(int index) {
          for (int i=0;i<buttons.length;i++) {
            buttons[i].setSelected(i == index);
          }
        }
     
        public int getSelectedIndex() {
          for (int i=0; i<buttons.length; i++) {
            if (buttons[i].isSelected()) {
              return i;
            }
          }      
          return -1;      
        }
     
        public JRadioButton[] getButtons() {
          return buttons;
        }
      }
     
     
     
      class RadioButtonRenderer extends    RadioButtonPanel
                                implements TableCellRenderer {    
        RadioButtonRenderer(String[] strs) {
          super(strs);
        }
     
        public Component getTableCellRendererComponent(JTable table, Object value,
                       boolean isSelected, boolean hasFocus, int row, int column) {
          if (value instanceof Integer) {
            setSelectedIndex(((Integer)value).intValue());
          }      
          return this;
        }
      }
     
     
     
      class RadioButtonEditor extends    DefaultCellEditor
                              implements ItemListener {
        RadioButtonPanel panel;
     
        public RadioButtonEditor(JCheckBox checkBox,RadioButtonPanel panel) {
          super(checkBox);
          this.panel = panel;
          ButtonGroup buttonGroup = new ButtonGroup();
          JRadioButton[] buttons  = panel.getButtons();
          for (int i=0; i<buttons.length; i++) {
            buttonGroup.add(buttons[i]);
            buttons[i].addItemListener(this);
          }                  
        }
     
        public Component getTableCellEditorComponent(JTable table, Object value,
                       boolean isSelected, int row, int column) {
          if (value instanceof Integer) {
            panel.setSelectedIndex(((Integer)value).intValue());
          }      
          return panel;
        }
     
        public Object getCellEditorValue() {
          return new Integer(panel.getSelectedIndex());
        }
     
        public void itemStateChanged(ItemEvent e) {
          super.fireEditingStopped();
        }
      }
    }

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/09/2012, 15h19
  2. [FPDF] Est il possible d'arrondir les résultats dans une cellule ?
    Par oliviertoy dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 05/10/2011, 10h01
  3. Réponses: 0
    Dernier message: 23/03/2011, 01h23
  4. Réponses: 2
    Dernier message: 27/04/2009, 10h20
  5. Réponses: 6
    Dernier message: 09/01/2009, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo