0

我在我的应用程序中使用 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;
}

现在我希望 statusPanel 是透明的并且 getGraphPaneScrollPane 在 GUI 中高于它,因为 getGraphPaneScrollPane 是我用来绘制节点的画布。

4

1 回答 1

1

我希望 statusPanel 是透明的,并且 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);
于 2013-05-15T03:08:35.230 回答