2017-06-12 5 views
0

J'ai un problème avec Java Swing, en particulier avec JLayeredPane. J'ai un gestionnaire de Deck qui contient 4 JPanels dans un JLayeredPane, mais quand j'ajoute un objet à un volet, puis passer à un autre, les objets deviennent invisibles au début, mais quand je passe avec la souris, il redevient visible même si Je suis sur un autre panneau, voici le code:Objets JLayeredPane affichés à partir d'un panneau "caché"

deckSelector = new JLayeredPane();               

    Point origin = new Point(30, 0); 

    for (int i = 0; i < types.length; i++) { 
     Deck deck = new Deck(types[i], colors[i], origin); 
     deckSelector.add(deck, i); 
     decks[i] = deck; 
    } 

pour changer

int j = 0; 
    boolean found = false; 
    for(int i=0; i<types.length; i++){ 
     if(selectors[i].isSelected()){ 
     deckSelector.setLayer(decks[i], 3); 
       found = true; 
       j=2; 
      } else 
      if(!selectors[i].isSelected()){ 
       deckSelector.setLayer(decks[i], j); 
       if(found) j--; 
       else j++; 
      }; 
      } 

ajouter une carte:

Card btnNewButton = new Card("Name Card"); 
    add(btnNewButton); 

J'ai un gestionnaire de plate-forme qui est le JLayerdPane principal, il a 4 ponts superposés, dans lequel je peux ajouter des cartes, mais quand je passe d'un jeu à l'autre, la carte est toujours visible. Quelqu'un peut-il m'aider?

Répondre

2

mais quand je passe avec la souris sur

Un événement mouseOver est de générer pour le composant. Dans le cas d'un JButton, la bordure est modifiée, le composant doit donc se repeindre. C'est pourquoi le composant devient visible.

Le point d'utilisation d'un JLayeredPane est de voir tous les calques en même temps. C'est juste que certains composants seront empilés les uns sur les autres. Si vous ne souhaitez afficher qu'un seul panneau à la fois, vous devez utiliser un Card Layout. Ensuite, vous pouvez échanger quel panneau est visible et à tout moment donné.

Si vous pensez que vous devez vraiment utiliser un JLayeredPane, essayez d'utiliser setVisible (false) sur le panneau que vous ne voulez pas voir. Cela devrait empêcher les événements d'être transmis aux composants du panneau de cette couche.

+0

Merci pour l'aide, je voulais utiliser le JLayeredPane bc je voulais échanger entre les volets de boutons assez loin de la vitre elle-même, et une disposition de la carte a les boutons attachés aux volets, je l'aurais utilisé autrement . Je vais essayer avec le setVisible (faux). – GabLog

+0

@GabLog, 'et une disposition de carte a les boutons attachés aux volets '- non, vous ne le concevez pas comme ça. Vous n'avez évidemment pas lu le tutoriel ou téléchargé le code et tester l'exemple de code. – camickr

+0

sry j'ai été confondu avec le tabbedPane, mais vous n'avez évidemment pas besoin d'être aussi arrogant – GabLog