Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JLayeredPane从“隐藏”面板显示对象_Java_Swing_Jlayeredpane - Fatal编程技术网

Java JLayeredPane从“隐藏”面板显示对象

Java JLayeredPane从“隐藏”面板显示对象,java,swing,jlayeredpane,Java,Swing,Jlayeredpane,我对Java Swing有一个问题,特别是对JLayeredPane。 我有一个Deck manager,它在一个JLayeredPane中包含4个JPanel,但当我向一个窗格添加一个对象,然后切换到另一个窗格时,这些对象开始会不可见,但当我打开鼠标通过时,即使我在另一个面板上,它也会返回可见,代码如下: deckSelector = new JLayeredPane();

我对Java Swing有一个问题,特别是对JLayeredPane。 我有一个Deck manager,它在一个JLayeredPane中包含4个JPanel,但当我向一个窗格添加一个对象,然后切换到另一个窗格时,这些对象开始会不可见,但当我打开鼠标通过时,即使我在另一个面板上,它也会返回可见,代码如下:

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;
    }
我有一个牌组管理器,它是主要的JLayerdPane,它有4个叠加的牌组,我可以在其中添加牌,但是当我从一个牌组切换到另一个牌组时,牌仍然可见。有人能帮我吗

但是当我带着鼠标走过的时候

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

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

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


如果您认为确实需要使用JLayeredPane,请尝试在您不想看到的面板上使用setVisiblefalse。这将防止事件传递到该层面板上的组件。

感谢您的帮助,我想使用JLayeredPane bc,我想在离面板本身很远的按钮的面板之间交换,而卡片布局将按钮连接到面板上,否则我会使用它。我将尝试使用setVisiblefalse@GabLog,并且卡片布局的按钮会附着在窗格上-不,不是这样,你不是这样设计的。您显然没有阅读教程或下载代码并测试示例代码。@GabLog,我只是陈述了一个事实。您说过,卡片布局的按钮附在窗格上。这完全不是真的,所以我纠正了你的说法,并告诉你阅读有关CardLayout的教程。我完全不知道标签窗格是从哪里进入对话的。我在回答中从来没有提到过。我不是一个读心术的人。我不知道你打算说什么,我只能根据你的实际陈述来评论。根据你的陈述,你不理解卡片布局是如何工作的。所以我花了额外的时间来澄清这个问题。这就是所谓的帮助@别忘了点击答案旁边的复选标记接受答案,这样人们就知道问题已经解决了。
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);