在GUI中重叠jpanel



我在我的应用程序中使用BorderLayout。我有一个主面板,我在其中心添加了两个jpanel。我希望其中一个是透明的。我的代码是:

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

这两个函数的代码如下:

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在GUI的上方,因为getGraphPaneScrollPane是画布,我用它来绘制节点。

我希望情境面板是透明的,getGraphPaneScrollPane在GUI的上方,

在顶部的面板是需要透明的面板。如果顶部的面板是不透明的,那么你将永远看不到顶部面板下的面板。

所以改变布局是我最不想要的。

这就是你需要做的。你不能只是将两个面板添加到一个面板上,然后期望它按照你想要的方式工作。大多数Swing布局管理器被设计成在两个维度上布局组件,而不是在另一个维度上。

你的当前代码是:

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);

相关内容

  • 没有找到相关文章

最新更新