Bonsoir,
Pour mon formulaire de commandes, j'ai besoin d'inclure un ComboBox dans une JTable vierge, qui va donc être remplie par l'utilisateur, avec l'EAN, le titre, le prix, la quantite. La seule cellule préremplie sera la ComboBox, alimentée par une requête SQL allant récupérer le nom des fournisseurs dans une table. La JTable est basée sur un AbstractModel et une liste.
Je suis perdu, car je ne sais pas où placer les différents éléments comme la requête SQL, déclarer la combobox dans mon modele... Je sais qu'il faut utiliser un TableCellRender pour afficher la ComboBox, mais malgré mes recherches, je n'ai pas trouvé d'exemple qui correspondait à mon cas.
Bref, voilà, je souhaite afficher une combobox remplie par une requete sql a partir d'un tableabstractmodel et une liste.
J'éspère avoir été clair des propos
Bien Cordialement
Laplume
Le TableModel
La classe de données
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 package com.pl.app; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import javax.swing.JComboBox; import javax.swing.table.AbstractTableModel; public class PriseCommandeTableModel extends AbstractTableModel { private List<Prisecommande> prisecommande = new ArrayList<Prisecommande>(); private String[] entetes = {"EAN","Diffuseur","Titre","Prix","Qte","Total"}; private JComboBox dif; public PriseCommandeTableModel() { super(); String SQL = "SELECT diffuseur FROM basediffuseurs"; JComboBox dif = new JComboBox(); try { Statement st = Connecteur.getInstance().createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY ); ResultSet result = st.executeQuery(SQL); ResultSetMetaData resultMeta = result.getMetaData(); while (result.next()) { dif.addItem(result.getString(1)); } result.close(); st.close(); } catch ( SQLException f ) { f.printStackTrace(); } prisecommande.add(new Prisecommande("","","",0,1,0)); } public int getRowCount() { return prisecommande.size(); } public int getColumnCount() { return entetes.length; } public String getColumnName(int columnIndex) { return entetes[columnIndex]; } //Methode qui teste la variable selectionnée et qui autorise ou non l'édition public boolean isCellEditable(int rowIndex, int columnIndex) { return true; } public Object getValueAt(int rowIndex, int columnIndex) { switch(columnIndex){ case 0: return prisecommande.get(rowIndex).getEAN(); case 1: return prisecommande.get(rowIndex).getdiffuseur(); case 2: return prisecommande.get(rowIndex).gettitre(); case 3: return prisecommande.get(rowIndex).getprix(); case 4: return prisecommande.get(rowIndex).getqte(); case 5: return prisecommande.get(rowIndex).gettotal(); default: return null; //Ne devrait jamais arriver } } public void addCommande(Prisecommande pri) { prisecommande.add(pri); fireTableRowsInserted(prisecommande.size() -1, prisecommande.size() -1); } public void removeCommande(int rowIndex) { prisecommande.remove(rowIndex); fireTableRowsDeleted(rowIndex, rowIndex); } }
Le Formulaire (l'affichage n'est pas encore optimisé, je me concentre d'abord sur la jtable)
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 package com.pl.app; import javax.swing.JComboBox; public class Prisecommande { private String EAN; private String diffuseur; private String titre; private float prix = 0; private int qte = 0; private float total = 0; public Prisecommande(String EAN,String diffuseur,String titre,float prix,int qte,float total ) { super(); this.EAN = EAN; this.diffuseur = diffuseur; this.titre = titre; this.prix = prix; this.qte = qte; this.total = total; } public String getEAN() { return EAN; } public void setEAN(String EAN) { this.EAN = EAN; } public String getdiffuseur() { return diffuseur; } public void setdiffuseur(String diffuseur) { this.diffuseur = diffuseur; } public String gettitre() { return titre; } public void settitre(String titre) { this.titre = titre; } public float getprix() { return prix; } public void setprix(float prix) { this.prix = prix; } public int getqte() { return qte; } public void setqte (int qte) { this.qte = qte; } public float gettotal() { return total; } public void settotal(float total) { this.total = total; } }
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 package com.pl.app; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.DefaultCellEditor; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.TableColumn; public class Formcom extends JDialog { JScrollPane scroll=new JScrollPane(); private JTable tableauc; private FormcomInfo zInfo = new FormcomInfo(); private boolean sendData; private JLabel clientLabel, prenomLabel, nomLabel, cheveuxLabel, ageLabel, tailleLabel,taille2Label, icon; private JRadioButton repoui, repnon; private JComboBox sexe, cheveux,pof; private JTextField client, nom, prenom,taille; private JButton jButton1; private PriseCommandeTableModel prisecom = new PriseCommandeTableModel(); public Formcom(JFrame parent, String title, boolean modal){ super(parent, title, modal); this.setSize(750, 400); this.setLocationRelativeTo(null); this.setResizable(false); this.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); this.initComponent(); } public FormcomInfo showFormcom(){ this.sendData = false; this.setVisible(true); return this.zInfo; } private void initComponent(){ //Icône icon = new JLabel(new ImageIcon("images/icone.jpg")); JPanel panIcon = new JPanel(); panIcon.setBackground(Color.white); panIcon.setLayout(new BorderLayout()); panIcon.add(icon); //-------------------- //Identification client JPanel panclient = new JPanel(); panclient.setBackground(Color.white); panclient.setPreferredSize(new Dimension(180, 60)); client = new JTextField(); client.setPreferredSize(new Dimension(60, 25)); panclient.setBorder(BorderFactory.createTitledBorder("Client")); clientLabel = new JLabel("Numéro client :"); panclient.add(clientLabel); panclient.add(client); //-------------------- //Nom et prénom JPanel panNomPrenom = new JPanel(); panNomPrenom.setBackground(Color.white); panNomPrenom.setPreferredSize(new Dimension(350, 60)); panNomPrenom.setBorder(BorderFactory.createTitledBorder("Nom et Prénom")); nom = new JTextField(); nomLabel = new JLabel("Nom :"); prenom = new JTextField(); prenomLabel = new JLabel("Prénom :"); nom.setPreferredSize(new Dimension(90, 25)); prenom.setPreferredSize(new Dimension(90, 25)); panNomPrenom.add(prenomLabel); panNomPrenom.add(prenom); panNomPrenom.add(nomLabel); panNomPrenom.add(nom); //Jtable pour saisir le où les produits commandés JPanel panCommande = new JPanel(); panCommande.setBackground(Color.white); panCommande.setPreferredSize(new Dimension(690, 150)); panCommande.setBorder(BorderFactory.createTitledBorder("Article(s) à commander :")); //-----AFFICHAGE DE LA JTABLE DE COMMANDE-------- tableauc = new JTable(prisecom); panCommande.setLayout(new BorderLayout()); panCommande.add(new JScrollPane(tableauc), BorderLayout.CENTER); //------------------------------------------------------- JPanel content = new JPanel(); content.setBackground(Color.white); content.add(panclient); content.add(panNomPrenom); content.add(panCommande); JPanel control = new JPanel(); JButton cancelBouton = new JButton("Annuler"); cancelBouton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { setVisible(false); } }); control.add(cancelBouton); this.getContentPane().add(panIcon, BorderLayout.WEST); this.getContentPane().add(content, BorderLayout.CENTER); this.getContentPane().add(control, BorderLayout.SOUTH); }
Partager