Partage
  • Partager sur Facebook
  • Partager sur Twitter

jtable recuperé de la base de donné + ajout d'une colonne

ajout de 2 radio buttons dans la meme colonne

Sujet résolu
    22 mars 2010 à 12:23:22

    Bonjour je suis en train de developper une application de gestion d'absence et je suis debutant dans la matiere.
    en effet je recupere les données qui sont stockés dans la base mysql dans une jtable avec un vecteur tout va bien jusque la
    mon probleme ce que je veux ajouter devant chaque ligne deux radio button (absent, present)
    voila mon code source:

    classe Jtable qui contient le main
    import javax.swing.*;
    import javax.swing.table.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.sql.*;
    import java.util.*;
    public class ListeJTable extends JPanel implements ActionListener {
        
    private Connection con = null;
    private Statement requete = null;
    private ResultSet rs = null;
    private JTable tableVisible = null;
    //InfosIp : Argument de type Panel
    public ListeJTable(){
    try{
    //Connexion SGDB
    String url = "jdbc:mysql://localhost/ecole";
    String login = "root";
    String paswordd = null;
    con = DriverManager.getConnection(url,login,paswordd);
    requete = con.createStatement();
    rs = requete.executeQuery("SELECT * FROM eleve");
    ResultSetMetaData md = rs.getMetaData();
    int columnCount = md.getColumnCount()+1;
    //utilisation de Vector
    Vector columns = new Vector(columnCount);
    for(int i=1; i<columnCount; i++)
    {columns.add(md.getColumnName(i));
    
    }columns.add("Absence");
    Vector data = new Vector();
    Vector row;
    while(rs.next())
    {
    row = new Vector(columnCount);
    for(int i=1; i<columnCount; i++)
    {
    row.add(rs.getString(i));
    
    }
    
    row.add(true);
    data.add(row);
    
    }
    
    
    
    final JTable table = new JTable(data, columns);
    
    /////////
    String[] answer = {"Present"};
    
        table.getColumn("Absence").setCellRenderer(
          new RadioButtonRenderer(answer)
        );
        table.getColumn("Absence").setCellEditor(
        	      new RadioButtonEditor(new JCheckBox(),
        	                            new RadioButtonPanel(answer))
        	    );
    
    
    
    /////////
    
    
    table.setPreferredScrollableViewportSize(new Dimension(500, 570));
    table.setRowHeight(30);
    table.setFillsViewportHeight(true);
    JScrollPane scrollPane = new JScrollPane(table);
    JTableHeader header = table.getTableHeader();
    header.setBackground(Color.blue);
    table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    add(scrollPane);
    this.setBorder(javax.swing.BorderFactory.createTitledBorder("liste enseignants"));
    this.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
    if (e.getClickCount() == 1) {
    System.out.println("Hello");
    }
    }
    });
    }
    catch(SQLException sqle){
    //cf Comment gérer les erreurs ?
    System.out.println(sqle);
    sqle.printStackTrace();
    }
    }
    public void actionPerformed(ActionEvent event) {
    }
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    JFrame application = new JFrame();
    ListeJTable jtable = new ListeJTable();
    application.add(jtable);
    application.setSize(new Dimension(600, 400));
    application.setVisible(true);
    application.validate();
    }
    
      
    }
    




    classe Render
    import java.awt.Component;
    
    import javax.swing.JRadioButton;
    
    import javax.swing.JTable;
    
    import javax.swing.table.TableCellRenderer;
    
      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;
        }
      }
    



    classe editor
    import java.awt.Component;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import javax.swing.ButtonGroup;
    import javax.swing.DefaultCellEditor;
    import javax.swing.JCheckBox;
    import javax.swing.JRadioButton;
    import javax.swing.JTable;
    
     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();
        }
      }
    


    classe button panel

    import javax.swing.BoxLayout;
    import javax.swing.JPanel;
    import javax.swing.JRadioButton;
    
    
      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;
        }
      }
    


    voila un aperçu de ce que j'obtiens:

    Image utilisateur

    mon probleme ce que je veux ajouter un autre radio button (absent) dans la colonne absence
    est ce que quelqu'un peut m'aider et merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter

    jtable recuperé de la base de donné + ajout d'une colonne

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown