bjr, j ai un problem concernant le control de saisi dans jtable cad par exemple : je veu bloquer la saisi dans une case de jtable les String :j veu autoriser selement la saisi des nombre et la vergule, et merci d'avance

bjr, j ai un problem concernant le control de saisi dans jtable cad par exemple : je veu bloquer la saisi dans une case de jtable les String :j veu autoriser selement la saisi des nombre et la vergule, et merci d'avance








Je te propose de faire une JTable de PlainDocument.
Dans celle ci redéfini la méthode insertString en lui donnant la liste ou le type des caractères à laisser passer.
Plus précisément, ajoute comme éditeur de la colonne concernée un JTextField auquel tu applique un PlainDocument.
Tu peux aussi passer par un simple JFormattedTextField, mais tu dois dans ce cas préciser un nombre de caractères max. Et surtout, tu pourras pas vérifier si l'utilisateur entre 2 virgules au lieu d'une seule... Si ça t'intéresse quand même voilà le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14MaskFormatter mask = null ; try { mask = new MaskFormatter("********"); } catch (ParseException e) { System.err.println("Le masque est incorrect") ; } // Les caractères valides sont les chiffres et les virgules mask.setValidCharacters("0123456789,") ; JFormattedTextField field = new JFormattedTextField( mask ) ; table.getColumn("Nombre").setCellEditor( new DefaultCellEditor( field ) ) ;

merci bcp: c fé
mais j ai un petit problem pour redifinr la methode "insertString" concernant la format pour entrer selement des chifre et une verguel
j ai fait cette format mais ca pas
String format = "^([0-9]+(.[0-9]*)?)?$";
et merci encor
[mode provocateur ON]
Ton problème il serait pas lié à l'orthographe plutôt qu'aux JTables ?![]()
[mode provocateur OFF]
pourqoi pas utiliser un DefaultCellEditor?Envoyé par zikass85
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 import java.awt.EventQueue; import java.awt.HeadlessException; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; /** * Created by IntelliJ IDEA. * User: bebe * Date: 03-Oct-2006 * Time: 19:15:32 * To change this template use File | Settings | File Templates. */ public class MyTableTest extends JFrame { public MyTableTest() throws HeadlessException { add(new JScrollPane(new JTable(new MyTableModel(3)))); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { new MyTableTest().setVisible(true); //To change body of implemented methods use File | Settings | File Templates. } }); } }
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
67import javax.swing.table.TableModel; import javax.swing.event.TableModelListener; /** * Created by IntelliJ IDEA. * User: bebe * Date: 03-Oct-2006 * Time: 19:16:31 * To change this template use File | Settings | File Templates. */ public class MyTableModel implements TableModel { private Object data[][]; int rowCount = 0; public MyTableModel(int rowCount) { this.rowCount = rowCount; data = new Object[rowCount][2]; for (int i = 0; i <rowCount; i++) { for (int j = 0; j <2; j++) { if (j%2 ==0) { data[i][j] = "I'm a string"; } else { data[i][j] = i+j; } } } } public int getRowCount() { return rowCount; //To change body of implemented methods use File | Settings | File Templates. } public int getColumnCount() { return 2; //To change body of implemented methods use File | Settings | File Templates. } public String getColumnName(int columnIndex) { return columnIndex == 0 ? "String" : "Float"; //To change body of implemented methods use File | Settings | File Templates. } public Class<?> getColumnClass(int columnIndex) { return columnIndex == 0 ? String.class : Float.class; //To change body of implemented methods use File | Settings | File Templates. } public boolean isCellEditable(int rowIndex, int columnIndex) { return true; //To change body of implemented methods use File | Settings | File Templates. } public Object getValueAt(int rowIndex, int columnIndex) { return data[rowIndex][columnIndex]; //To change body of implemented methods use File | Settings | File Templates. } public void setValueAt(Object aValue, int rowIndex, int columnIndex) { data[rowIndex][columnIndex] = aValue; } public void addTableModelListener(TableModelListener l) { //To change body of implemented methods use File | Settings | File Templates. } public void removeTableModelListener(TableModelListener l) { //To change body of implemented methods use File | Settings | File Templates. } }
Essaie "^([0-9]+([.][0-9]+)?)?$"String format = "^([0-9]+(.[0-9]*)?)?$";
Pour obtenir le caractère '.' il faut le mettre entre crochets : "[.]". Sinon ça signifie "n'importe quel caractère".

merci à tous
mais j ai essayé avec cette
format "^([0-9]+([,][0-9]+)?)?$" mais cette fois il bloque aussi les vergule
Salut
J'ai eu le meme problème que toi mais je ne l'ai pas solutionné de la meme manière. Dans mon TableModel j'ai simplement mis un try catch(NumberFormatException) lors de la conversion des chaines en nombres. Si c'est pas un nombre je remet à 0.
je comprend pas tout mais quelqu'1 peut me dire
pourquoi le default cell editor pour les float c'est pas bon?
Partager