JPanel ontop of other JPanels

时间:2018-03-16 05:51:56

标签: java swing layout jpanel overlap

我想在java中的其他JPanel上弹出一个JPanel。但是我在互联网上找不到任何有用的东西。我试着玩绝对定位但是从底层的按钮这样的东西穿过顶层。 我上传了一个非常难看的我想做的事情。 这样做有简单的方法吗?

enter image description here

编辑: 我试着做出什么" Ulkra"建议。这是代码和截图:

public class Main {

public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setVisible(true);
    frame.setSize(new Dimension(400, 400));

    JPanel panel = new JPanel();

    JPanel foregroundPanel = new JPanel();      
    foregroundPanel.setVisible(false);
    foregroundPanel.setBackground(Color.BLUE);
    foregroundPanel.setLayout(new BoxLayout(foregroundPanel, BoxLayout.Y_AXIS));

    JPanel backgroungPanel = new JPanel();      
    backgroungPanel.setBackground(Color.RED);
    backgroungPanel.setLayout(new BoxLayout(backgroungPanel, BoxLayout.Y_AXIS));

    for (int i = 0; i < 10; i++) {
        backgroungPanel.add(new JButton("BackgroundBtn " + i));
    }       
    foregroundPanel.add(new JButton("ForegroundBtn 1"));

    JButton makeVisibleBtn = new JButton("+");
    makeVisibleBtn.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            foregroundPanel.setVisible(true);
        }
    });     
    backgroungPanel.add(makeVisibleBtn);        

    JButton makeInvisibleBtn = new JButton("-");
    makeInvisibleBtn.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            foregroundPanel.setVisible(false);
        }
    });     
    foregroundPanel.add(makeInvisibleBtn);      

    panel.add(backgroungPanel);
    panel.add(foregroundPanel);

    frame.add(panel);
}

}

enter image description here

1 个答案:

答案 0 :(得分:-3)

为此,你必须使用一个Panel(如果你使用的是NetBeans,你可以在Swing Containers中找到它),而在Frame的constuctor中,你必须将它设置为不可见,所以你需要看看它的底部它:(在这个例子中,我把我的面板称为“jPanel1”,我把它放在其中)

public Main() {
    initComponents();
    jPanel1.setVisible(false);//<-- This!
    this.setLocationRelativeTo(null);
}

然后,你创建了一个buttom来“激活它”,但是这个代码在:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    jPanel1.setVisible(true);
}  

(当然,如果你想把它设置为不可见,你只需要像在构造函数中一样)。

我测试它并且它有效:( Imgur没有工作,所以借口我必须使用postimg.org) https://postimg.org/gallery/1z6fpajva/

现在您可以设置边框,以便将新面板与其他框架区分开来: https://postimg.org/image/mdpf7hvxx/