2017-06-12 49 views
0

我对Java Swing有问题,特别是使用JLayeredPane。 我有一个Deck管理器,它包含JLayeredPane中的4个JPanel,但是当我将一个对象添加到一个窗格,然后切换到另一个时,对象首先变为隐形,但是当我通过鼠标传递时,即使通过它也会返回可见我在一个不同的面板,下面的代码:从“隐藏”面板显示的JLayeredPane对象

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

改变

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

新增卡片:

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

我有一个平台管理器,是主要的JLayerdPane,它有4副牌叠加在其中我可以添加牌,但是当我从一个牌组切换到另一个时,牌依然可见。谁能帮我?

回答

2

但是当我用鼠标传递

mouseOver事件是生成用于所述组件。在JButton的情况下,边框被改变,所以组件需要重新绘制自己。所以这就是组件变得可见的原因。

使用JLayeredPane的要点是同时查看所有图层。它只是将一些组件堆叠在其他组件上。

如果您只想一次看到一个面板,那么您应该使用Card Layout。然后,您可以交换哪个面板可见并且在任何给定时间。

如果您认为您确实需要使用JLayeredPane,然后尝试在不希望看到的面板上使用setVisible(false)。这应该防止事件传递到该层面板上的组件。

+0

谢谢你的帮助,我想使用的JLayeredPane BC我想从按钮从面板本身很远的窗格之间进行切换,以及卡的布局具有连接到窗格的按钮,我会使用,否则。我会尝试setVisible(false)。 – GabLog

+0

@GabLog,'和一个卡片布局有附加到窗格的按钮 - 不,不是你不这样设计它。您显然没有阅读教程或下载代码并测试示例代码。 – camickr

+0

SRY我糊涂了与选项卡窗格,但你显然并不需要是傲慢 – GabLog