IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Rendre des lignes non éditables


Sujet :

AWT/Swing Java

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut Rendre des lignes non éditables
    Salut,

    est-il possible d'indiquer "à la main" les lignes que l'on ne souhaite pas pouvoir éditer ?

    Merci

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    quand tu fais ton "tableModel" tu as la methode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public boolean isCellEditable(int row, int col) {
        	return false;
        	}
    tu peux ensuite te faire quelques methodes pour manipuler ca.

  3. #3
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    d'ou vient cette methode?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public boolean isCellEditable(EventObject anEvent) {
    	return true;
        }
    je ne la trouve ni dans AbstractTableModel ni dans DefaultTableModel, c'est quel ecouteur?

    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 ;
        }

  4. #4
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    Salut!

    C'est pas la bonne classe!!!

    Citation Envoyé par Premium
    public class Editeur extends AbstractCellEditor implements TableCellEditor {
    // le bouton qui est le composant affiche pour l'edition de couleur

    C'est pour ca que
    Citation Envoyé par eclesia
    je ne la trouve ni dans AbstractTableModel ni dans DefaultTableModel, c'est quel ecouteur?
    Faut que tu mettes isCellEditable dans une classe qui etends AbstractTableModel

  5. #5
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    *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):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    table.setDefaultRenderer( Double.class, new DoubleRenderer() );
    classe DoubleRenderer
    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;
    		}
     
    }
    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
     
    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;
        	}
     
    }
    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();
    			}
    		}
     
    }
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JTable] Rendre une colonne non éditable
    Par d_hazem dans le forum Composants
    Réponses: 2
    Dernier message: 04/06/2008, 10h48
  2. Rendre une ComboBox non éditable
    Par Tangui dans le forum Débuter
    Réponses: 1
    Dernier message: 08/05/2008, 16h22
  3. Récupérer des lignes non enregistrées dans une table
    Par leddy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/04/2008, 15h09
  4. filtrer des lignes non adjacentes
    Par collinchris dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/08/2007, 13h39
  5. [swing] Comment rendre le bouton non éditable ... .
    Par issou dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 03/04/2006, 17h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo