Salut,
est-il possible d'indiquer "à la main" les lignes que l'on ne souhaite pas pouvoir éditer ?
Merci
Salut,
est-il possible d'indiquer "à la main" les lignes que l'on ne souhaite pas pouvoir éditer ?
Merci
quand tu fais ton "tableModel" tu as la methode :
tu peux ensuite te faire quelques methodes pour manipuler ca.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public boolean isCellEditable(int row, int col) { return false; }
d'ou vient cette methode?
je ne la trouve ni dans AbstractTableModel ni dans DefaultTableModel, c'est quel ecouteur?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public boolean isCellEditable(EventObject anEvent) { return true; }
un petit coup de propre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public boolean isCellEditable(int rowIndex, int columnIndex){ //return ( columnIndex > 0 ) ? true : false ; //pourquoi je m'embete avec ca... faire simple quand c'est simple return columnIndex > 0 ; }
Salut!
C'est pas la bonne classe!!!
Envoyé par Premium
C'est pour ca queFaut que tu mettes isCellEditable dans une classe qui etends AbstractTableModelEnvoyé par eclesia
*comprend mieux le melange*
tu es en train de melanger le modele de ton tableau avec la facon dont il doit traiter le contenu des cellules.
*j'ai galéré avec les tableaux moi aussi au debut*
tu as ton tableau Jtable.
il a un modele : MonModel extends AbstractTableModel ou DefaultTableModel
un jtable gere l'affichage des cellules selon la classe de l'objet contenu.
un jcombox pour des booleans
un jlabel pour l'affichage et un jtextfield pour l'edition dasn le cas des string
etc...
Si tu as quelque chose d'inhabituel, comme ca a l'air d'etre ton cas tu doit redefinir la facon dont il doit traiter les "String".
Exemple pour gérer la classe Double (ajouter un "Euros" a la fin et alignement a droite):
classe DoubleRenderer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 table.setDefaultRenderer( Double.class, new DoubleRenderer() );
Dans cette exemple je ne traite que le rendu dans le tableau, mais tu peux faire de meme avec l'edition.
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 package utiles.tableaux; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Font; import javax.swing.BorderFactory; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.table.TableCellRenderer; public class DoubleRenderer extends JPanel implements TableCellRenderer{ private static final long serialVersionUID = 1; private JLabel lab = new JLabel(); public DoubleRenderer() { super(new BorderLayout()); } public Component getTableCellRendererComponent( JTable table, Object param, boolean isSelected, boolean hasFocus, int row, int column) { String str = param.toString(); Color col = Color.WHITE; double d = new Double(str).doubleValue(); d *= 100; d = (int)(d+.5); d /= 100; String val = String.valueOf(d); if( val.length() - val.indexOf(".") <= 2 ){ val = val + "0"; } val += " "; if(isSelected){ col = new Color(185,205,250); } lab.setBackground(col); this.setBackground(col); if(hasFocus){ this.setBorder( BorderFactory.createLineBorder( new Color(140,140,220),1)); } else{ this.setBorder( BorderFactory.createLineBorder( col,1) ); } lab.setFont( new Font("Serial",Font.PLAIN,12) ); lab.setOpaque(true); lab.setText( val ); this.add("East",lab); return this; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 table.setDefaultRenderer( JButton.class, new ButtonRenderer() ); table.setDefaultEditor( JButton.class, new ButtonEditor() );
les classes :
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 package utiles.tableaux; import java.awt.Component; import javax.swing.AbstractCellEditor; import javax.swing.JButton; import javax.swing.JTable; import javax.swing.table.TableCellEditor; public class ButtonEditor extends AbstractCellEditor implements TableCellEditor{ private static final long serialVersionUID = 1; JButton button = new JButton(); public ButtonEditor(){ super(); } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { button = (JButton)value; return button; } public Object getCellEditorValue() { return button; } }J'ai mit des classes "légère" pour expliquer le fonctionnement mais avec cette facon de faire tu peux gérer tout et n'importe quoi.
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 package utiles.tableaux; import java.awt.Component; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.table.TableCellRenderer; public class ButtonRenderer extends JButton implements TableCellRenderer{ private static final long serialVersionUID = 1; public ButtonRenderer() { } public Component getTableCellRendererComponent( JTable table, Object param, boolean isSelected, boolean hasFocus, int row, int column) { if(param.getClass() == JButton.class){ setBorderPainted(false); JButton but = (JButton)param; this.setText(but.getActionCommand()); return this; } else{ return new JLabel(); } } }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager