JTable

Résolu/Fermé
Yass321 Messages postés 4 Date d'inscription samedi 20 septembre 2014 Statut Membre Dernière intervention 15 novembre 2014 - Modifié par KX le 20/09/2014 à 14:13
Yass321 Messages postés 4 Date d'inscription samedi 20 septembre 2014 Statut Membre Dernière intervention 15 novembre 2014 - 21 sept. 2014 à 05:15
Bonjour,

Je dois créer une interface pour mon cour de programmation. Le but de cet interface est de l'utiliser comme un jeu de mise( L'utilisateur lance le dé, met une mise de 10$ ou moins et dois choisir un chiffre de 1 à 6. L'application génère alors un chiffre au hasard et si le chiffre générée est le même que celui choisie, l'utilisateur gagne 5* le montant de sa mise.Il continue de jouer jusqu'à qu'il n'ai plus rien.

Cependant, j'ai un problème. Je dois mettre une table de statistiques (JTable) pour montrer a l'utilisateur combien de fois chaque face du dé a été générée.
J'ai essayer de le coder, mais je n'arrive pas. J'ai utiliser cette méthode (pour leDe=1,2,3,4,5,6):

if(leDe==1){
    tableComp.setValueAt(lblNumDe,1,2);}

Et ceci est la table :

tableComp.setModel(new DefaultTableModel(
   new Object[][] {
     {"Face", "Compteur"},
    {1,null},
    {2, null},
    {3, null},
    {4, null},
    {5, null},
    {6, null},
   },
   new String[] {
    "New column", "New column"
   }


Quand je lance mon programme, tout fonctionne sauf la table,j'ai une erreur qui dit :

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.table.DefaultTableColumnModel.getColumn(Unknown Source)
at sun.swing.SwingUtilities2.convertColumnIndexToModel(Unknown Source)
at javax.swing.JTable.convertColumnIndexToModel(Unknown Source)
at javax.swing.JTable.setValueAt(Unknown Source)
at Dé$2.actionPerformed(Dé.java:198)

La ligne 198 étant:
tableComp.setValueAt(lblNumDe,1,2);}


Je l'ai programmer avec eclipse et windowBuilder, donc le code de JTable est générer par windowBuilder.
Comment regler cela ?
Merci d'avance !

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.JOptionPane;
import javax.swing.JSpinner;
import javax.swing.JRadioButton;
import javax.swing.JSlider;
import javax.swing.ButtonGroup;
import javax.swing.SpinnerNumberModel;
import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Random;

import javax.swing.JList;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.UIManager;
import javax.swing.border.TitledBorder;

import java.awt.Color;

import javax.swing.border.BevelBorder;
import javax.swing.border.LineBorder;

import junit.framework.Test;

public class Dé extends JFrame {

    private JPanel fenetre;
    private JLabel valDé;
    private JSpinner valChoisie;
    private JLabel lblNumDe;
    private JLabel miseDé;
    private JLabel lblMontantRestant;
    private JLabel montant;
    private JRadioButton rdbtnNewRadioButton;
    private JRadioButton rdbtnNewRadioButton_1;
    private JSpinner spinner_1;
    private final ButtonGroup bouton = new ButtonGroup();
    private JButton btnLancer;
    private JList list;
    private JTable tableComp;
    private int n=10;
    private JPanel panel;
    private JPanel panel_1;
    private JPanel panel_2;
    private JLabel lblFaitesVotreMise;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Dé frame = new Dé();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Dé() {
        setTitle("Jeu de mise");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 495, 357);
        fenetre = new JPanel();
        fenetre.setBackground(UIManager.getColor("activeCaption"));
        fenetre.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(fenetre);
        fenetre.setLayout(null);
        
        valDé = new JLabel("Nombre lanc\u00E9 par le d\u00E9 :");
        valDé.setForeground(Color.BLACK);
        valDé.setToolTipText("");
        valDé.setFont(new Font("Tahoma", Font.BOLD, 13));
        valDé.setBounds(29, 269, 159, 50);
        fenetre.add(valDé);
        
        panel_2 = new JPanel();
        panel_2.setBounds(10, 144, 188, 50);
        fenetre.add(panel_2);
        panel_2.setLayout(null);
        
        valChoisie = new JSpinner();
        valChoisie.setBounds(92, 7, 52, 30);
        panel_2.add(valChoisie);
        valChoisie.setModel(new SpinnerNumberModel(1, 1, 6, 1));
        valChoisie.setFont(new Font("Tahoma", Font.PLAIN, 18));
        
        miseDé = new JLabel("  Valeur choisie :");
        miseDé.setFont(new Font("Tahoma", Font.BOLD, 11));
        miseDé.setBounds(0, 0, 90, 50);
        panel_2.add(miseDé);
        
        lblNumDe = new JLabel();
        lblNumDe.setFont(new Font("Tahoma", Font.PLAIN, 19));
        lblNumDe.setBounds(198, 266, 29, 50);
        fenetre.add(lblNumDe);
        
        panel = new JPanel();
        panel.setBounds(29, 73, 194, 50);
        fenetre.add(panel);
        panel.setLayout(null);
        
        lblMontantRestant = new JLabel("Montant restant :");
        lblMontantRestant.setBounds(0, 0, 117, 57);
        panel.add(lblMontantRestant);
        lblMontantRestant.setFont(new Font("Tahoma", Font.BOLD, 13));
        
        panel_1 = new JPanel();
        panel_1.setBorder(new TitledBorder(null, "JPanel title", TitledBorder.LEADING, TitledBorder.TOP, null, null));
        panel_1.setBounds(136, -16, 64, 73);
        panel.add(panel_1);
        panel_1.setLayout(null);
        
        montant = new JLabel("10 $");
        montant.setBounds(6, 16, 52, 50);
        panel_1.add(montant);
        montant.setFont(new Font("Tahoma", Font.PLAIN, 20));
        
        rdbtnNewRadioButton = new JRadioButton("Mise de 1$");
        rdbtnNewRadioButton.setSelected(true);
        rdbtnNewRadioButton.setForeground(UIManager.getColor("Tree.foreground"));
        bouton.add(rdbtnNewRadioButton);
        rdbtnNewRadioButton.setRolloverEnabled(false);
        rdbtnNewRadioButton.setRequestFocusEnabled(false);
        rdbtnNewRadioButton.setBounds(284, 72, 109, 23);
        fenetre.add(rdbtnNewRadioButton);
        
        rdbtnNewRadioButton_1 = new JRadioButton("Autre montant");
        bouton.add(rdbtnNewRadioButton_1);
        rdbtnNewRadioButton_1.setDoubleBuffered(true);
        rdbtnNewRadioButton_1.setBounds(284, 100, 109, 23);
        fenetre.add(rdbtnNewRadioButton_1);
        
        spinner_1 = new JSpinner();
        spinner_1.setModel(new SpinnerNumberModel(0, 0, 10, 1));
        spinner_1.setBounds(320, 125, 60, 20);
        fenetre.add(spinner_1);
        
        btnLancer = new JButton("Lancer le D\u00E9 !");
        btnLancer.setFont(new Font("Tahoma", Font.BOLD, 13));
        btnLancer.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Random generateur= new Random ();
                int leDe= 1+ generateur.nextInt(6);
                lblNumDe.setText(Integer.toString(leDe));
                
                n=n-1;
                if (rdbtnNewRadioButton.isSelected()){
                    montant.setText(Integer.toString(n)+"$");
                }else if (rdbtnNewRadioButton_1.isSelected()){
                    n=1+n-((Integer)spinner_1.getValue());
                    montant.setText(Integer.toString(n)+"$");
                }if(n<1){
                    JOptionPane.showMessageDialog(null,"Vous ne pouvez plus faire de mise, votre solde  est insuffisant. Au revoir!");{
                        System.exit(0);
                    }
                }
                
            if((Integer)valChoisie.getValue()==leDe){
            JOptionPane.showMessageDialog(null,"Vous avez gagné: "+n*5+"$ !" );
        }
        
            if(leDe==1){
                tableComp.setValueAt(lblNumDe,1,2);
            }if(leDe==2){
                tableComp.setValueAt(lblNumDe,2,2);
            }
            if(leDe==3){
                tableComp.setValueAt(lblNumDe,3,2);
            }
            if(leDe==4){
                tableComp.setValueAt(lblNumDe,4,2);
            }
            if(leDe==5){
                tableComp.setValueAt(lblNumDe,5,2);
            }
            if(leDe==6){
                tableComp.setValueAt(lblNumDe,6,2);
            }

            }});
        btnLancer.setBounds(50, 228, 191, 46);
        fenetre.add(btnLancer);
        
        list = new JList();
        list.setBounds(340, 282, 70, -63);
        fenetre.add(list);
        
        tableComp = new JTable();
        tableComp.setName("Table");
        tableComp.setEditingRow(0);
        tableComp.setEditingColumn(2);
        tableComp.setColumnSelectionAllowed(true);
        tableComp.setBorder(new LineBorder(new Color(0, 0, 0)));
        tableComp.setAutoCreateRowSorter(true);
        tableComp.setFillsViewportHeight(true);
        tableComp.setCellSelectionEnabled(true);
           
        tableComp.setModel(new DefaultTableModel(
            new Object[][] {
                    {"Face", "Compteur"},
                {1,null},
                {2, null},
                {3, null},
                {4, null},
                {5, null},
                {6, null},
            },
            new String[] {
                "New column", "New column"
            }
        ));
        tableComp.setBounds(315, 196, 117, 112);
        fenetre.add(tableComp);
        
        lblFaitesVotreMise = new JLabel("Faites votre mise !");
        lblFaitesVotreMise.setBackground(Color.BLACK);
        lblFaitesVotreMise.setForeground(Color.BLACK);
        lblFaitesVotreMise.setFont(new Font("Comic Sans MS", Font.PLAIN, 25));
        lblFaitesVotreMise.setBounds(136, 27, 215, 35);
        fenetre.add(lblFaitesVotreMise);        
    }

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
20 sept. 2014 à 14:25
Bonjour,

tableComp.setValueAt(lblNumDe,6,2);

En Java les indices de tableaux commencent à 0. Donc la deuxième colonne de ton tableau est à l'indice 1, pas 2.

De plus c'est un tableau d'Object qui est affiché, cela va donc appeler la méthode toString, or c'est un JLabel que tu settes, il vaudrait mieux afficher son contenu.

tableComp.setValueAt(lblNumDe.getText(),6,1);

Il reste d'autres bugs à corriger, mais ça va te permettre d'avancer.
1
Yass321 Messages postés 4 Date d'inscription samedi 20 septembre 2014 Statut Membre Dernière intervention 15 novembre 2014
21 sept. 2014 à 05:15
Ça fonctionne ! Merci beaucoup KX :)
0