2

私はこのコードを持っており、JPanel を作成して JScrollPanel に追加します。正常に動作しますが、2 番目の JPanel を追加しようとすると、最初の JPanel が削除され、2 番目の JPanel が追加されます。JPanels の上に JPanel を配置できるようにしたいのですが、どうすればよいですか?

// 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);
    }
}
4

3 に答える 3

6

を使用している単一のマスターパネルにパネルを配置することを検討することをお勧めしますCardLayout

これにより、パネルを簡単に切り替えることができ、手動で行う手間をかけずに、レイヤードパネルのような錯覚を与えることができます。

何かのようなもの...

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); 
于 2012-11-29T21:50:35.040 に答える
3

Zove Games の提案を使用して JLayerdPanel 内に配置したところ、完全に機能しました!

于 2012-11-29T22:35:09.150 に答える
1

両方のパネルを 1 つの JPanel 内に配置してから、それを JScrollPane に配置できます。

于 2012-11-29T21:44:52.360 に答える