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

Développement 2D, 3D et Jeux Discussion :

java : image sur tableau?


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Points : 13
    Points
    13
    Par défaut java : image sur tableau?
    Bonjour,
    je souhaite programmer un jeu avec java et je voulais savoir s'il était possible d'afficher des images dans certaines case d'un tableau (javax.swing.JTable)?

    Aussi, comment peut on faire pour afficher en arrière plan du tableau une autre image car la fonction setbackground ne prend en argument que des couleurs.

    Merci d'avance.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 59
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    Pour personnaliser l'affichage des cases d'une JTable, il faut écrire un Table Cell Renderer (c.a.d une classe qui implémente l'interface javax.swing.table.TableCellRenderer). Il suffit alors d'en enregistrer une instance dans la JTable via l'opération JTable.setDefaultRenderer(...). Celle-ci sera alors en mesure d'afficher une image (ou ce que tu veux) dans les cases.

    Pour afficher une image en arrière plan de la JTable, ça peut se faire en insérant la JTable dans un JLabel. L'image doit s'afficher dans le JLabel, et la JTable s'affichera par-dessus. Dans ce cas, il ne faut pas oublier de configurer de la transparence pour la JTable (JTable.setOpaque(false)).

    dstar

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Pour le background, j'ai déja essayé table.setOpaque(false), et malheureusement ça ne marche pas la table n'est toujours pas transparente..

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 59
    Points : 62
    Points
    62
    Par défaut
    Pour le background, j'ai déja essayé table.setOpaque(false), et malheureusement ça ne marche pas la table n'est toujours pas transparente..
    Effectivement, j'ai été un peu rapide sur ce coup. Ca marche avec la plupart des autres composants Swing, mais pas avec la JTable.
    La raison est que la JTable n'est pas juste un composant Swing, la table est fabriquée avec un composant différent pour chaque case. Du coup, quand on veut rendre la table transparente, il faut rendre l'ensemble des composants transparents.

    Là encore, j'ai peur qu'il faille jouer avec le Table Cell Renderer, et il y a plusieurs solutions possibles.
    Le plus simple est sans doute de faire un Table Cell Renderer sous forme de décorateur (le design pattern) qui appelle l'ancien Table Cell Renderer et qui, au passage, ajoute la transparence sur les composants créés (solution que je n'ai pas testée).

    dstar

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Ce que tu entends par un décorateur ce serait une classe abstraite qui modifie des méthodes, mais une classe de quel type d'objets? objet case d'une table?

    Parce que dans ma fonction prepare renderer j'ai essayé de set jouer avec les SetOpaque et les setvisible mais pour l'instant ca donne rien.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 59
    Points : 62
    Points
    62
    Par défaut
    Non, je pensais à un décorateur pour l'interface TableCellRenderer, un truc de ce style:
    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
     
    class TransparentTableCellRendererDecorator implements TableCellRenderer
    {
         public TransparentTableCellRendererDecorator(TableCellRenderer renderer)
         {
              ir = renderer;
         }
     
         public Component getTableCellRendererComponent(JTable table,
                                                        Object value,
                                                        boolean isSelected,
                                                        boolean hasFocus,
                                                        int row,
                                                        int column)
         {
              JComponent res =
                   (JComponent) ir.getTableCellRendererComponent(table,
                                                                 value,
                                                                 isSelected,
                                                                 hasFocus,
                                                                 row,
                                                                 column);
              res.setOpaque(false);
              return res;
         }
     
         private TableCellRenderer ir;
    }
    Puis ensuite, tu remplaces les table cell renderers de la JTable par celui-ci:
    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
     
    JTable table = new JTable(...);
    ...
    int columnsNb = table.getColumnModel().getColumns();
    ArrayList<Class> columnClasses = new ArrayList<Class>();
    for(int i = 0; i < columnsNb; i++)
    {
         Class columnClass = table.getColumnClass(i);
         if(!columnClasses.contains(columnClass))
              columnClasses.add(columnClass);
    }
    int columnClassesNb = columnClasses.size();
    for(int i = 0; i < columnClassesNb; i++)
    {
         Class columnClass = columnClasses.get(i);
         TableCellRenderer oldRenderer =
              table.getDefaultCellRenderer(columnClass);
         TableCellRenderer newRenderer =
              new TransparentTableCellRendererDecorator(oldRenderer);
         table.setDefaultRenderer(columnClass, newRenderer);
    }
    Voilà, si je n'ai pas fait trop d'erreurs, la JTable créée dans mon exemple devrait avoir des cases transparentes (mais j'avoue ne pas avoir eu le temps de tester).

    dstar

  7. #7
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Pourquoi ne pas utiliser Java2D pour faire quelque chose de sympa ?

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    ok merci dstar je vais essayer de ce pas

    Jamais entendu parler de java2D avant, je vais voir ça aussi

  9. #9
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568

Discussions similaires

  1. [HTML] Image sur plusieurs cellule de tableau
    Par lolothep dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 30/07/2008, 16h32
  2. Réponses: 3
    Dernier message: 05/06/2008, 16h30
  3. image d'arrière plan unique sur tableau
    Par lodan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 06/07/2006, 09h57
  4. Image sur Tableau
    Par franck.automaticien dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 19/04/2006, 09h18
  5. Mettre une image sur une autre image et tableau
    Par Michaël dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 19/06/2005, 18h31

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