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

Composants Java Discussion :

JTable & Look and feel


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Architecte IT
    Inscrit en
    Janvier 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Architecte IT

    Informations forums :
    Inscription : Janvier 2006
    Messages : 24
    Par défaut JTable & Look and feel
    Bonjour,
    j'ai crée un look and feel spécifique et sur les JTable, les renderers et editors ne prennent pas par défaut le bon composant UI pour les composants genre JComboBox et continuent d'être ceux de Metal.

    J'ai donc redéfini les renderers et forcé le setUI sur chaque objet "exotique" de la table (par exemple une JComboBox), pour les renderers.

    N'y a-t-il pas une méthode plus simple ? Doit-on faire un traitement particulier pour forcer la prise en compte des composants UI dans la JTable ?

    En effet, l'analyse des performances s'avère assez mauvaise avec cette méthode (pas mal d'instances créées).

    Merci d'avance.

  2. #2
    Membre émérite
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Par défaut
    tu dois dire un peu plus si tu veut de l'aide.

    1- tu as crer un Look and feel complet ? (t'es sur c'est pas un theme pour le laf metal?)
    2- tu extend d'un laf existant?
    3- si c'est un laf complet tu dois avoir une table de UIDefaults pour chaque composant? tu a fait ca?

    si tu veut de l 'aide, faut expliquer comment tu a fait ton laf ;-)

  3. #3
    Membre averti
    Profil pro
    Architecte IT
    Inscrit en
    Janvier 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Architecte IT

    Informations forums :
    Inscription : Janvier 2006
    Messages : 24
    Par défaut
    Oui j'aurais du préciser excusez-moi.

    En fait j'ai créé un L&F complet qui étends Metal. J'ai créé les classes UI qui vont bien (ButtonUI etc...), j'ai assigné chaque composant UI avec la bonne classe dans mon L&F dans la méthode initClassDefaults de la classe du L&F.

    J'ai donc une table AvTableUI qui étends BasicTableUI.

    Lorsque j'essaie de mettre un bouton dans une table (avec un model qui renvoie la bonne valeur dans le getColumnClass et que je crée un renderer pour le JButton), il s'affiche en Metal lorsque je met mon L&F, l'editor est aussi celui du bouton Metal.
    (Note, si je suis en L&F Metal, Motif ou Windows le bouton s'affiche pareil dans la JTable)

    Dans la méthode installUI, j'ai donc forcé l'installation de renderers spécifiques et forcé un setUI sur ma classe UI si une cellule est de type Button, ComboBox...

    Ma question est donc: n'y a-t-il pas moyen d'éviter celà en faisant en sorte que chaque composant dans la JTable prenne le bon composant UI ? Peut-être il y a-t-il une manière spécifique de coder le renderer ?

  4. #4
    Membre émérite
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Par défaut
    le ComponentUI utiliser pour dessiner un composant vient des UIDefaults. si tu as mis

    table.put("ButtonUI", "package.sub.package.MyButtonUI")

    (table c'est la table UIDefaults de ton Laf)


    si tu as fait ca, c'est cette classe qui doit etre utiliser. ca vient de la sauf si tu change pour un composant en faisant un setUI dessus. c'est tu a mis dans ton UIDefaults la bonne classe et que t'a encore un probleme, le probleme vient de quelque part d'autre alors (normalement :-) )

  5. #5
    Membre averti
    Profil pro
    Architecte IT
    Inscrit en
    Janvier 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Architecte IT

    Informations forums :
    Inscription : Janvier 2006
    Messages : 24
    Par défaut
    Oui j'ai bien fait cela, j'ai bien associé chaque composant avec son UI et mon bouton normal s'affiche comme je veux mais dans une JTable.

    Pas d'idée particulière ? les composants UI sont les mêmes dans la JTable non ?

  6. #6
    Membre émérite
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Par défaut
    je viens de faire le test.

    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
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Component;
    import static java.awt.EventQueue.invokeLater;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Rectangle;
    import java.awt.EventQueue;
    import java.text.MessageFormat;
    import java.lang.reflect.InvocationTargetException;
     
    import javax.swing.AbstractButton;
    import javax.swing.JButton;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.UIManager;
    import javax.swing.plaf.ComponentUI;
    import javax.swing.plaf.metal.MetalButtonUI;
    import javax.swing.table.TableCellRenderer;
     
    /**
     * Created by IntelliJ IDEA.
     * User: bebe
     * Date: 21-Oct-2006
     * Time: 10:23:43
     *
     * THIS IS A REALLY REALLY DIRTY CODE !
     * ONLY FOR TEST PURPOSE !
     *
     */
    public class MyButtonUI extends MetalButtonUI {
     
        private final static MyButtonUI buttonUI = new MyButtonUI();
     
        public static ComponentUI createUI(JComponent c) {
            return buttonUI;
        }
     
        public void paint(Graphics g, JComponent c) {
            Graphics2D g2D = (Graphics2D) g;
            Rectangle rec1 = new Rectangle(0, 0, c.getWidth(), c.getHeight());
     
            g2D.setColor(Color.WHITE);
            g2D.fill(rec1);
     
            super.paintText(g, c, rec1, ((AbstractButton) c).getText());
        }
     
        /**
         * @param args
         */
        public static void main(String[] args) {
     
            /* First put the following try/catch in comment. (stop your comment just
               before next comment).
               See what's happen. (you should see the default OceanTheme in action :-)) ).
     
               Uncomment these lines again, and you should see the button UI (MyButtonUI) in action.
               */
            try {
                EventQueue.invokeAndWait(new Runnable() {
                    public void run() {
                        UIManager.put("ButtonUI", "MyButtonUI");
                    }
                });
            } catch (InterruptedException e) {
                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
            } catch (InvocationTargetException e) {
                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
            }
            /* comment till here */
     
            invokeLater(new Runnable() {
                public void run() {
                    JFrame myFrame = new JFrame("This is my frame");
     
                    Object[][]o = {
                            {"Hello", "The", "World"},
                            {"I'm", "dizzy", "this morning"}
                    };
                    String[] columnNames = {"1", "2", "3"};
     
                    JTable myTable = new JTable(o, columnNames) {
                        public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
                            return new JButton(MessageFormat.format("row {0}, col {1}", new Object[]{row, column}));
                        }
                    };
     
                    myFrame.add(new JScrollPane(myTable));
                    myFrame.add(new JButton("I am a button"), BorderLayout.SOUTH);
                    myFrame.pack();
                    myFrame.setLocationRelativeTo(null);
                    myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
                    myFrame.setVisible(true);
                }
            });
        }
    }
    essaye avec ton ButtonUI et dis moi qu'est ce que t'a comme resultat.

    je repete que ceci est un code vraiment pas propre du tout et ne gere rien du tout.

Discussions similaires

  1. Ligne d'une jTable avec look and feel du header
    Par nddvlp dans le forum Composants
    Réponses: 5
    Dernier message: 05/11/2013, 11h46
  2. [Look and feel] Texte des JLabels en gras
    Par aliasjcdenton dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 26/01/2006, 11h49
  3. [JTable]Problême de Look and Feel???
    Par D-Phaz dans le forum Composants
    Réponses: 1
    Dernier message: 05/08/2005, 15h24
  4. Nouveau look and feel
    Par julian_ross dans le forum JBuilder
    Réponses: 6
    Dernier message: 16/12/2003, 15h55
  5. 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