JLayeredPane对象显示来自"隐藏"面板

时间:2017-06-12 13:35:54

标签: java swing jlayeredpane

我遇到了Java Swing的问题,尤其是JLayeredPane。 我有一个Deck管理器,它在JLayeredPane中包含4个JPanel,但是当我将一个对象添加到一个窗格,然后切换到另一个时,对象首先变为不可见,但是当我通过鼠标时,它会返回可见,即使是我和我#39; m在另一个Panel上,这里是代码:

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层甲板,我可以添加卡片,但是当我从一个卡片切换到另一个卡片时,卡片仍然可见。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

  

但是当我用鼠标传递时

为组件生成mouseOver事件。在JButton的情况下,边框被更改,因此组件需要重新绘制自身。这就是组件变得可见的原因。

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

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

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