Bonjour,
Comment récupérer la valeur saisie par l'utilisateur ?
Je souhaite savoir ce qu'il vient de taper pour mettre le texte en majuscules et faire d'autres choses avec.
Merci.
Bonjour,
Comment récupérer la valeur saisie par l'utilisateur ?
Je souhaite savoir ce qu'il vient de taper pour mettre le texte en majuscules et faire d'autres choses avec.
Merci.
Et la javadoc, alors ?
Voici la solution![]()
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
Que la force de la puissance soit avec le courage de ta sagesse.
Salut,
Merci pour l'aide mais j'ai une exception
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.Vector.elementAt(Vector.java:430)
at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:632)
at Tableau.tableChanged(Tableau.java:89)
at javax.swing.JTable.setModel(JTable.java:3626)
at javax.swing.JTable.<init>(JTable.java:611)
at javax.swing.JTable.<init>(JTable.java:539)
at Tableau.<init>(Tableau.java:14)
at FenetrePrincipale.<init>(FenetrePrincipale.java:19)
at MainClass$1.run(MainClass.java:23)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
BUILD SUCCESSFUL (total time: 1 second)
Voici le code de ma classe :
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 import java.awt.Font; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumn; import javax.swing.table.TableModel; class Tableau extends JTable implements TableModelListener { public Tableau(){ getModel().addTableModelListener(this); this.setModel(new DefaultTableModel(new Object[][]{ {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null} }, new String [] { "<html><bold><H3>HEURE", "<html><bold><H3>RECETTE", "<html><bold><H3>NOMBRE", "<html><bold><H3>RELIQUATS", "<html><bold><H3>TOTAL", "<html><bold><H3>NB CONT", "<html><bold><H3>NB BU", "<html><bold><H3>GROUPE" } )); this.setFont(new Font("SANS SERIF", Font.BOLD, 16)); DefaultTableCellRenderer custom = new DefaultTableCellRenderer(); custom.setHorizontalAlignment(JLabel.CENTER); for (int i=0 ; i<this.getColumnCount() ; i++) { this.getColumnModel().getColumn(i).setCellRenderer(custom); } for (int i = 0; i < 8; i++) { TableColumn col = this.getColumnModel().getColumn(i); col.setPreferredWidth(100); this.getColumnModel().getColumn(i).setResizable(false); this.tableHeader.setReorderingAllowed(false); } this.setRowSelectionAllowed(false); this.setRowHeight(28); } @Override public void tableChanged(TableModelEvent e) { int row = e.getFirstRow(); int column = e.getColumn(); TableModel model = (TableModel)e.getSource(); String columnName = model.getColumnName(column); Object data = model.getValueAt(row, column); // A suivre... } }
Même si je laisse le corps de la fonction TableChanged vide, j'ai l'exception.
C'est un problème de débordement du tableau.
J'avoue que je suis un peu paumé là.
Salut,
Voici un exemple.
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 import java.awt.Color; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.TableModel; public class Tableau { public static void main(String[] args) { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Object[][] donnees = { { "Swing", "Astral", "standard", Color.red, Boolean.TRUE }, { "Swing", "Mistral", "standard", Color.yellow, Boolean.FALSE }, { "Gin", "Oasis", "standard", Color.blue, Boolean.FALSE }, { "Gin", "boomerang", "compétition", Color.green, Boolean.TRUE }, { "Advance", "Omega", "performance", Color.cyan, Boolean.TRUE }, }; String[] titreColonnes = { "marque", "modèle", "homologation", "couleur", "vérifiée ?" }; JTable jTable1 = new JTable(donnees, titreColonnes); jTable1.getModel().addTableModelListener(new TableModelListener() { @Override public void tableChanged(TableModelEvent e) { int row = e.getFirstRow(); int column = e.getColumn(); TableModel model = (TableModel) e.getSource(); String columnName = model.getColumnName(column); Object data = model.getValueAt(row, column); System.out.println("Colone '" + columnName + "', ligne " + row + " : newValue -> \"" + data+"\""); } }); f.add(new JScrollPane(jTable1)); f.pack(); f.setVisible(true); } }
Tu me postes un code mais je préfèrerais des explications plutôt car là ça ne m'aide pas beaucoup.
Mais je te remercie tout de même.
J'ai changé le constructeur de mon Tableau pour "coller" à ton exemple :
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 import java.awt.Font; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableModel; class Tableau extends JTable implements TableModelListener { public Object[][] donnees = { {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null}, }; public String[] enTetes = { "<html><bold><H3>aa", "<html><bold><H3>bb", "<html><bold><H3>ccE", "<html><bold><H3>dd", "<html><bold><H3>ee", "<html><bold><H3>ff", "<html><bold><H3>gg", "<html><bold><H3>hh" }; public Tableau(Object[][] donnees, String[] enTetes){ getModel().addTableModelListener(this); this.setFont(new Font("SANS SERIF", Font.BOLD, 16)); DefaultTableCellRenderer custom = new DefaultTableCellRenderer(); custom.setHorizontalAlignment(JLabel.CENTER); for (int i=0 ; i<this.getColumnCount() ; i++) { this.getColumnModel().getColumn(i).setCellRenderer(custom); } for (int i = 0; i < 8; i++) { TableColumn col = this.getColumnModel().getColumn(i); col.setPreferredWidth(100); this.getColumnModel().getColumn(i).setResizable(false); this.tableHeader.setReorderingAllowed(false); } this.setRowSelectionAllowed(false); this.setRowHeight(28); this.setVisible(true); } @Override public void tableChanged(TableModelEvent e) { int row = e.getFirstRow(); int column = e.getColumn(); TableModel model = (TableModel)e.getSource(); String columnName = model.getColumnName(column); Object data = model.getValueAt(row, column); // A suivre... } }
Mais comment déclarer le tableau ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part private Tableau tableau = new Tableau(ICI);
Dois-je obligatoirement créer une classe qui étend AbstractTableModel pour ensuite remplir ma Jtable avec ce modèle ou puis-je m'en passer ?
Je précise que le tableau sera rempli "manuellement" par l'utilisateur (comme un tableau Excel).
Ensuite je devrais à chaque saisie vérifier le format, mettre en majuscules certaines saisies ou encore réaliser un calcul avec le nombre saisi dans une colonne pour afficher le résultat dans une autre colonne.
Mes différents tests pour récupérer une valeur ou afficher du texte dans une cellule (par appui sur un bouton par exemple) fonctionnent sans problème.
Le soucis est vraiment sur la ligne :
Pourquoi je déborde du tableau en mettant ça ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part public void tableChanged(TableModelEvent e)
Merci.
Du nouveau. J'ai fait ceci :
J'ai un dépassement de pile :
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 this.getModel().addTableModelListener(new TableModelListener() { @Override public void tableChanged(TableModelEvent e) { int row = e.getFirstRow(); int column = e.getColumn(); TableModel model = (TableModel)e.getSource(); String columnName = model.getColumnName(column); Object data = model.getValueAt(row, column); String tt = data.toString(); model.setValueAt(tt, row, column); // cette ligne pose problème } });
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
Edit : trompé de topic.i.
Par contre je voudrais un traitement différent selon la colonne :
Si telle colonne -> mettre en majuscules.
Si autre -> vérifier si la saisie est ok (ex: compatible avec le type "heure").
si encore autre -> ouvrir fichier et vérifier si la saisie correspond à une référence.
etc ...
Partager