Tableau contenant des radio buttons

Résolu/Fermé
maroun_ba Messages postés 11 Date d'inscription samedi 9 février 2013 Statut Membre Dernière intervention 5 avril 2013 - Modifié par maroun_ba le 18/03/2013 à 12:15
maroun_ba Messages postés 11 Date d'inscription samedi 9 février 2013 Statut Membre Dernière intervention 5 avril 2013 - 19 mars 2013 à 09:33
Bonjour,
J'ai un tableau qui contient des radios boutons.Lorsque j'exécute mon programme, la dernière valeur n'est pas lue.
Voici le code

import java.awt.*;
import java.awt.event.*;


import javax.swing.*;
import javax.swing.table.*;

/**
* @version 1.2 08/13/99
*/
public class tableau extends JFrame implements ActionListener{
JRadioButton[] buttons;
private JButton valider;
AbstractButton aButton;
TableColumnModel tcm;
DefaultTableModel dm;
DefaultTableModel tmnu;
public tableau(){
super( "JRadioButtonTable Example" );
Container c=this.getContentPane();
c.setLayout(new GridLayout(5,9));
JPanel panelbas=new JPanel(new FlowLayout());
JLabel titre=new JLabel("",SwingConstants.CENTER);
titre.setForeground(Color.red);
titre.setFont(new Font("TimesRoman",Font.ITALIC,16));
titre.setText(" Compatibilité des comptes 60 Achats avec les spécificités de l'activité de l'entité :");
c.add(titre);
setTitle("contrôle verticaux");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
dm = new DefaultTableModel();
dm.setDataVector(
new Object[][]{
{"","","L'entité est-elle industrielle partiellement ou totalement ?",new Integer(-1)},
{"","","Les produits finis nécessitent-ils des emballages ?",new Integer(-1)},
{"","","L'entité commercialise-t-elle des services (achat pour la revente) ?",new Integer(-1)},
{"","","L'entité commercialise-t-elle des matériels, équipements ou travaux (achat pour la revente) ?",new Integer(-1)},
{"","","L'entité est-elle commerciale partiellement ou totalement (achat pour la revente) ?",new Integer(-1)}},
new Object[]{"Numéros des comptes d'achats ","Intitulés des comptes","Questionnaire sur la spécificité de l'activité correspondante au compte de charges à tester","Réponses"});

JTable table = new JTable(dm);
String[] answer = {"Oui","Non"};
tcm = table.getColumnModel();
tcm.getColumn(2).setPreferredWidth(600);
tcm.getColumn(2).setMinWidth(600);
table.setFont(new Font("TimesRoman",Font.ITALIC,14));
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
table.getColumn("Réponses").setCellRenderer(
new RadioButtonRenderer(answer)
);
table.getColumn("Réponses").setCellEditor(
new RadioButtonEditor(new JCheckBox(),
new RadioButtonPanel(answer))
);
JScrollPane scroll = new JScrollPane(table);
scroll.setPreferredSize( new Dimension( 200, 200 ) );
getContentPane().add( scroll );
valider = new JButton("valider");
panelbas.add( valider);
c.add(panelbas);
valider.addActionListener(this);
this.setSize(1000,600);
this.setTitle("contrôle indiciaire");
this.setVisible(true);


}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub

if(e.getSource()==valider)
{controle();
}
}
private void controle() {
for (int i=0;i<=4;i++)
{
Object a = dm.getValueAt(i,3);
int d= Integer.parseInt(a.toString());
System.out.println(d);


}}
// TODO Auto-generated method stub


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

@Override
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
{
RadioButtonPanel panel;

public RadioButtonEditor(JCheckBox checkBox,RadioButtonPanel panel) {
super(checkBox);
this.panel = panel;
ButtonGroup buttonGroup = new ButtonGroup();
buttons = panel.getButtons();
for (int i=0; i<buttons.length; i++) {
buttonGroup.add(buttons[i]);

}
}

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 static void main(String[] args) {
tableau frame = new tableau();
}
}
Lorsque je clique sur vrai pour toutes les questions la console affiche 0 0 0 0 et -1 donc la dernière valeur n'est pas lu.Je ne sais pas pourquoi.

Aidez moi et merci.

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
18 mars 2013 à 19:19
Ton problème est plus grave que ce que tu penses, car tes réponses "changent" au fur et à mesure du programme.

Exemple, tu dis toujours oui, tu as 0 0 0 0 -1, puis tu dis toujours non, tu as 1
1 1 0 1, et enfin on remet tout à oui, et tu as 0 0 0 0 1 !!

Il ne s'agit donc pas d'un problème de tableau qui serait pas lu au complet, sinon tu aurais toujours les même valeurs !

Après, ton code est totalement illisible, donc te corriger en l'état c'est juste pas possible... mais toi qui connais ton code (j'espère pour toi) regarde de plus près ton erreur en prenant en compte mes remarques sur les changements de valeurs que j'ai obtenu en testant.
0
maroun_ba Messages postés 11 Date d'inscription samedi 9 février 2013 Statut Membre Dernière intervention 5 avril 2013 1
Modifié par maroun_ba le 19/03/2013 à 09:34
Bonjour,
Oui ce programme change au fur et à mesure tu as 1 1 1 0 1 comme réponse c'est parce que le dernier radio buttons que tu as cliqué est le 4éme il a mis 0 la valeur ancienne du radio buttons.
Merci pour ton aide en tout cas.
0