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 :

Récupérer le Look & Feel


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 99
    Par défaut Récupérer le Look & Feel
    Bonjour,

    j'ai mis en place un Look & Feel dans mon application. Celui-ci permet par exemple dans une JTable d'afficher les lignes paires d'une couleur différente des lignes impaires.
    Cependant, j'ai besoin de modifier certains Renderer, comme pour mettre des JComboBox dans une JTable, ou encore afficher du texte dans une autre couleur. Lorsque je modifie le renderer, je perds le Look and Feel. Comment le récupérer? (comment récupérer la couleur de la cellule?)

    Merci

  2. #2
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Par défaut
    Citation Envoyé par nanourene Voir le message
    je perds le Look and Feel.
    Salut nanourene, est-ce-que toutes les options de look and feel sont perdues

    ou seulement l'option des lignes de JTable ?

    moi j'utilise le look and feel liquid , celui aussi affiche des lignes paires et impaires avec des coleurs differents , et meme si j'applique des renderers
    sur des colonnes aucun problème n'est produit , essayer de voir vous
    Renderers,


  3. #3
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    Comme tu redéfini un renderer cela ajoute un composant (probablement un JLabel) "par dessus" la JTable. Si tu n'indique pas la couleur a ce Label, tu "perd" ton LAF.

    Voici un exemple que j'ai fait fonctionné avec le LAF liquid, qui a lui aussi la coloration de ligne pair/impair. Le renderer affiche oui ou non plutôt que true ou false.

    Utilise le boolean withLAF (true ou false) pour voir la différence. isSelected permet de savoir si la cellule est sélectionné ou pas. On récupère la couleur avec table et la méthode qui va bien suivant l'état (table.getSelectionForeground() ou table.getForeground() pour le premier plan).

    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
    122
    123
    124
    125
    126
    127
    import java.awt.Color;
    import java.awt.Component;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.TableCellRenderer;
     
    @SuppressWarnings("serial")
    public class Test extends JFrame {
     
    	private JTable table;
    	private boolean withLAF = true;
     
    	public static void main(String[] args) {
    		try {
    			UIManager.setLookAndFeel("com.birosoft.liquid.LiquidLookAndFeel");
    			new Test();
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		} catch (InstantiationException e) {
    			e.printStackTrace();
    		} catch (IllegalAccessException e) {
    			e.printStackTrace();
    		} catch (UnsupportedLookAndFeelException e) {
    			e.printStackTrace();
    		}
    	}
     
    	public Test() {
    		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 ?" };
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		TableModele model = new TableModele(donnees, titreColonnes);
    		table = new JTable(model);
    		table.setDefaultRenderer(Boolean.class, new BooleanRenderer());
    		add(new JScrollPane(table));
    		pack();
    		setLocationRelativeTo(null);
    		setVisible(true);
    	}
     
    	public class TableModele extends AbstractTableModel {
     
    		private Object donnees[][];
    		private String titres[];
     
    		public TableModele(Object donnees[][], String titres[]) {
    			this.donnees = donnees;
    			this.titres = titres;
    		}
     
    		@Override
    		public int getColumnCount() {
    			return donnees[0].length;
    		}
     
    		@Override
    		public Object getValueAt(int parm1, int parm2) {
    			return donnees[parm1][parm2];
    		}
     
    		@Override
    		public int getRowCount() {
    			return donnees.length;
    		}
     
    		@Override
    		public String getColumnName(int col) {
    			return titres[col];
    		}
     
    		@Override
    		public Class<?> getColumnClass(int columnIndex) {
    			if (columnIndex == 4)
    				return Boolean.class;
    			else
    				return super.getColumnClass(columnIndex);
    		}
     
    	}
     
    	public class BooleanRenderer extends JLabel implements TableCellRenderer {
     
    		public BooleanRenderer() {
    			this.setOpaque(true);
    		}
     
    		public Component getTableCellRendererComponent(JTable table,
    				Object value, boolean isSelected, boolean hasFocus, int row,
    				int col) {
    			if (withLAF) {
    				if (isSelected) {
    					setForeground(table.getSelectionForeground());
    					setBackground(table.getSelectionBackground());
    				} else {
    					setForeground(table.getForeground());
    					setBackground(table.getBackground());
    				}
    				setHorizontalAlignment(JLabel.CENTER);
    				if (((Boolean) value).booleanValue())
    					setText("OUI");
    				else
    					setText("NON");
     
    				return this;
    			} else {
    				setForeground(Color.red);
    				setHorizontalAlignment(JLabel.CENTER);
    				if (((Boolean) value).booleanValue())
    					setText("OUI");
    				else
    					setText("NON");
    				return this;
    			}
    		}
    	}
    }
    Bien sûr, change la ligne,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UIManager.setLookAndFeel("com.birosoft.liquid.LiquidLookAndFeel");
    pour y mettre le LAF que tu veux.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 99
    Par défaut
    Bonjour,

    J'ai essayé la méthode de visiwi, cependant cela ne change rien au design de ma table.

    Si j'applique le renderer uniquement sur une colonne, les autres colonnes s'affiche normalement (couleur différente une ligne sur deux). Par contre si je l'applique à l'ensemble de ma JTable, tout le L&F est perdu.

    le look and feel que j'utilise est le suivant :
    org.jvnet.substance.skin.SubstanceOfficeSilver2007LookAndFeel

    Merci.

  5. #5
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Avec substance, il faut faire hérité un SubstanceDefaultTableCellRenderer.

    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
    import java.awt.Color;
    import java.awt.Component;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    import javax.swing.table.AbstractTableModel;
     
     
    @SuppressWarnings("serial")
    public class Test extends JFrame {
     
    	private JTable table;
     
     
    	public static void main(String[] args) {
    		try {
    			UIManager
    					.setLookAndFeel("org.jvnet.substance.skin.SubstanceOfficeSilver2007LookAndFeel");
    			new Test();
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		} catch (InstantiationException e) {
    			e.printStackTrace();
    		} catch (IllegalAccessException e) {
    			e.printStackTrace();
    		} catch (UnsupportedLookAndFeelException e) {
    			e.printStackTrace();
    		}
    	}
     
    	public Test() {
    		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 ?" };
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		TableModele model = new TableModele(donnees, titreColonnes);
    		table = new JTable(model);
    		table.setDefaultRenderer(Boolean.class, new BooleanRenderer());
    		add(new JScrollPane(table));
    		pack();
    		setLocationRelativeTo(null);
    		setVisible(true);
    	}
     
    	public class TableModele extends AbstractTableModel {
     
    		private Object donnees[][];
    		private String titres[];
     
    		public TableModele(Object donnees[][], String titres[]) {
    			this.donnees = donnees;
    			this.titres = titres;
    		}
     
    		@Override
    		public int getColumnCount() {
    			return donnees[0].length;
    		}
     
    		@Override
    		public Object getValueAt(int parm1, int parm2) {
    			return donnees[parm1][parm2];
    		}
     
    		@Override
    		public int getRowCount() {
    			return donnees.length;
    		}
     
    		@Override
    		public String getColumnName(int col) {
    			return titres[col];
    		}
     
    		@Override
    		public Class<?> getColumnClass(int columnIndex) {
    			if (columnIndex == 4)
    				return Boolean.class;
    			else
    				return super.getColumnClass(columnIndex);
    		}
     
    	}
     
    	public class BooleanRenderer extends
    			org.jvnet.substance.SubstanceDefaultTableCellRenderer {
     
    		public BooleanRenderer() {
    		}
     
    		public Component getTableCellRendererComponent(JTable table,
    				Object value, boolean isSelected, boolean hasFocus, int row,
    				int col) {
    			Component c = super.getTableCellRendererComponent(table, value,
    					isSelected, hasFocus, row, col);
     
    			setHorizontalAlignment(JLabel.CENTER);
    			if (((Boolean) value).booleanValue()) {
    				setForeground(Color.green.darker().darker());
    				setText("OUI");
    			}
    			else {
    				setForeground(Color.red);
    				setText("NON");
    			}
    			return c;
    		}
    	}
    }

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 99
    Par défaut
    Effectivement, il fallait hériter un SubstanceDefaultTableCellRenderer pour le Look and Feel Substance.

    Merci beaucoup!

  7. #7
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Par défaut
    moi aussi je remercie notre professeur visiwi

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

Discussions similaires

  1. [Look and feel] Texte des JLabels en gras
    Par aliasjcdenton dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 26/01/2006, 11h49
  2. [look and feel] Ou les trouver ?
    Par olive.m dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 08/03/2004, 18h42
  3. Nouveau look and feel
    Par julian_ross dans le forum JBuilder
    Réponses: 6
    Dernier message: 16/12/2003, 15h55
  4. Jbuilder9 Look and feel de borland
    Par wsrudmen dans le forum JBuilder
    Réponses: 6
    Dernier message: 26/06/2003, 18h07

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