Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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 将多个JPanel放置在彼此的顶部_Java_Swing_Jpanel_Layout Manager - Fatal编程技术网

Java 将多个JPanel放置在彼此的顶部

Java 将多个JPanel放置在彼此的顶部,java,swing,jpanel,layout-manager,Java,Swing,Jpanel,Layout Manager,我有这段代码,它生成一个JPanel并将其添加到JScrollPanel。它工作得很好,但是当我尝试添加第二个JPanel时,它会删除第一个并添加第二个。我希望能够将JPanels放在JPanels之上,我如何才能做到这一点 // Location of an image: String file = wfc.getSelectedFile().getPath(); // Creates images from different types: ImageHandler image = new

我有这段代码,它生成一个JPanel并将其添加到JScrollPanel。它工作得很好,但是当我尝试添加第二个JPanel时,它会删除第一个并添加第二个。我希望能够将JPanels放在JPanels之上,我如何才能做到这一点

// Location of an image:
String file = wfc.getSelectedFile().getPath();

// Creates images from different types:
ImageHandler image = new ImageHandler();
BufferedImage imageData = image.imageData(file);

// Extends JPanel, Layer is a JPanel
Layer layer = new Layer(image.width(), image.height());
layer.setImage(imageData);
layer.setSizeFromLoaded();
// A list of all the JPanels added
Layers.set(Layers.layers.size(), layer);

// Adds a JPanel to the JScrollPanel
imagePane.getViewport().add(layer, BorderLayout.CENTER);
这是完整的方法,它打开一个文件浏览器,然后在选择图像时运行上述代码

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
    WebFileChooser wfc = null;
    if(wfc == null){
        wfc = new WebFileChooser(this, "Open an Image");
        wfc.setSelectionMode(SelectionMode.SINGLE_SELECTION);
        wfc.setAvailableFilter(GlobalConstants.IMAGES_AND_FOLDERS_FILTER);
        wfc.setChooseFilter(GlobalConstants.IMAGES_FILTER);
        wfc.setCurrentDirectory("/Users");
    }
    wfc.setVisible(true);

    if(wfc.getResult() == StyleConstants.OK_OPTION){
        String file = wfc.getSelectedFile().getPath();

        ImageHandler image = new ImageHandler();
        BufferedImage imageData = image.imageData(file);

        Layer layer = new Layer(image.width(), image.height());
        layer.setImage(imageData);
        layer.setSizeFromLoaded();
        Layers.set(Layers.layers.size(), layer);

        imagePane.getViewport().add(layer, BorderLayout.CENTER);
    }
}

您可以将两个面板放在一个JPanel中,然后将其放入JScLanPan.

< P>您可能希望考虑将面板放置到使用.< /P>的单个主面板中。 这将允许您轻松地在面板之间切换,从而产生分层面板的错觉,而无需手动操作

类似于

JPanel master = new JPanel(new CardLayout());
master.add(new ChildPane()); // Or what ever child you want to add
master.add(new ChildPane()); // Or what ever child you want to add
//...
JScrollPane scrollPane = new JScrollPane(master); 

我使用了Zove Games的建议,并将其放在一个JLayerdPanel中,效果非常好

试试JLayeredPane。但是要小心,您可能必须
设置不透明(false)
完美!添加时,是否可以将其放在旧窗格的顶部而不是后面?是的,只需使用JLayeredPane.add(Component,int),其中int是层号。