2017-06-12 3 views
0

Ich habe ein Problem mit Java Swing, insbesondere mit JLayeredPane. Ich habe einen Deck-Manager, der 4 JPanels in einem JLayeredPane enthält, aber wenn ich ein Objekt zu einem Fenster hinzufüge und dann zu einem anderen verschiebe, werden die Objekte zunächst unsichtbar, aber wenn ich mit der Maus weiter gehe, erscheint sie sogar sichtbar ich bin auf einem anderen Gremium, hier ist der Code:JLayeredPane-Objekte, die von einem "versteckten" Panel zeigen

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

zu

ändern
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++; 
      }; 
      } 

eine Karte hinzuzufügen:

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

ich ein Deck-Manager haben die ist das Haupt JLayerdPane, es hat 4 Decks überlagert, in denen ich Karten addieren kann, aber wenn ich von einem Stapel zu anderen umschalte, ist die Karte noch sichtbar. Kann mir jemand helfen?

Antwort

2

aber wenn ich mit der Maus weitergeben

Mouseover-Ereignis ist für die Komponente erzeugen. Bei einem JButton wird der Rahmen geändert, sodass sich die Komponente neu streichen muss. Deshalb wird die Komponente sichtbar.

Der Zweck eines JLayeredPane ist es, alle Schichten gleichzeitig zu sehen. Es ist nur so, dass einige Komponenten übereinander gestapelt werden.

Wenn Sie nur ein einzelnes Fenster gleichzeitig sehen möchten, sollten Sie ein Card Layout verwenden. Dann können Sie tauschen, welches Panel sichtbar ist und zu welcher Zeit.

Wenn Sie glauben, dass Sie wirklich einen JLayeredPane verwenden müssen, dann versuchen Sie mit setVisible (false) auf dem Panel, das Sie nicht sehen wollen. Dies sollte verhindern, dass Ereignisse an Komponenten im Panel in dieser Ebene übergeben werden.

+0

Danke für die Hilfe, ich wollte die JLayeredPane bc verwenden Ich wollte zwischen den Scheiben von Schaltflächen ziemlich weit von der Scheibe selbst austauschen, und ein Kartenlayout hat die Tasten an den Scheiben, hätte ich das sonst verwendet . Ich versuche es mit dem setVisible (false). – GabLog

+0

@GabLog, 'und ein Kartenlayout hat die Knöpfe an den Scheiben befestigt - nein, es ist nicht so, dass Sie es nicht so entwerfen. Sie haben das Tutorial offensichtlich nicht gelesen oder den Code heruntergeladen und den Beispielcode nicht getestet. – camickr

+0

sry Ich habe mit der TabbedPane verwechselt, aber Sie müssen offensichtlich nicht so arrogant sein – GabLog

Verwandte Themen