我遇到了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层甲板,我可以添加卡片,但是当我从一个卡片切换到另一个卡片时,卡片仍然可见。任何人都可以帮助我吗?
答案 0 :(得分:2)
但是当我用鼠标传递时
为组件生成mouseOver事件。在JButton的情况下,边框被更改,因此组件需要重新绘制自身。这就是组件变得可见的原因。
使用JLayeredPane的目的是同时查看所有图层。它只是将一些组件堆叠在其他组件之上。
如果您只想一次看到一个面板,那么您应该使用Card Layout。然后您可以交换哪个面板可见且任何给定时间。
如果您认为确实需要使用JLayeredPane,请尝试在您不希望看到的面板上使用setVisible(false)。这应该可以防止事件传递到该层面板上的组件。