0

アプリケーションで BorderLayout を使用しています。中央に 2 つの JPanel を追加するメイン パネルがあります。そのうちの1つを透明にしたい。私のコードは次のとおりです。

 mainPanel = new JPanel();
 mainPanel.setLayout(new BorderLayout());
 mainPanel.add(getGraphPaneScrollPane(), BorderLayout.CENTER);
 mainPanel.add(getSituationPanel(), BorderLayout.CENTER);

これら 2 つの関数のコードは次のとおりです。

public JScrollPane getGraphPaneScrollPane() {
    if (graphPaneScrollPane == null) {
        graphPaneScrollPane = new JScrollPane();
        graphPaneScrollPane.setViewportView(getGraphEditorPane());
    }
    return graphPaneScrollPane;
}
private JScrollPane getSituationPanel(){
    if(situationPanel == null){
        logs.debug("Initializing Situation Panel");

        situationPanel = new JScrollPane();

        situationLabel = new JLabel("");
        situationLabel.setVerticalTextPosition(JLabel.BOTTOM);
        situationLabel.setHorizontalTextPosition(JLabel.CENTER);
        situationLabel.setVerticalAlignment(JLabel.TOP);
        situationLabel.setHorizontalAlignment(JLabel.CENTER);
        situationLabel.setBorder(BorderFactory.createTitledBorder(""));
        situationLabel.setBackground(Color.WHITE);
        situationLabel.setOpaque(true);
        situationLabel.setVerticalAlignment(SwingConstants.TOP);

        situationPanel.setViewportView(situationLabel); 

    } 

    return situationPanel;
}

getGraphPaneScrollPane はノードを描画するために使用するキャンバスであるため、ここで、situationPanel を透明にし、getGraphPaneScrollPane を GUI の上に配置したいと考えています。

4

1 に答える 1

1

GUI では、situationPanel を透明にし、getGraphPaneScrollPane をその上に配置したいと考えています。

一番上にあるパネルは、透明にする必要があるパネルです。上部のパネルが不透明な場合、上部パネルの下にパネルが表示されることはありません。

したがって、レイアウトを変更することは、私が望む最後のことです。

それがあなたがする必要があることです。1 つのパネルに 2 つのパネルを追加するだけで、思いどおりに動作することを期待することはできません。ほとんどの Swing レイアウト マネージャーは、コンポーネントを相互に重ねるのではなく、2 次元でレイアウトするように設計されています。

現在のコードは次のとおりです。

mainPanel.setLayout(new BorderLayout());
mainPanel.add(getGraphPaneScrollPane(), BorderLayout.CENTER);
mainPanel.add(getSituationPanel(), BorderLayout.CENTER);

OverlayLayout を使用してみることができます。これは、パネルを別のパネルの上にレイアウトするように設計されています。コードは次のようになります。

JPanel overlay = new JPanel();
overlay.setLayout( new OverlayLayout(overlay) );
overlay.add(getSituationPanel(), BorderLayout.CENTER); // add transparent panel first
overlay.add(getGraphPaneScrollPane(), BorderLayout.CENTER);
mainPanel.setLayout(new BorderLayout()); 
mainPanel.add(overlay);
于 2013-05-15T03:08:35.230 に答える