我在我的应用程序中使用BorderLayout。我有一个主面板,我在中心添加两个JPanels。我希望其中一个是透明的。 我的代码是:
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;
}
现在我希望situationPanel是透明的,并且getGraphPaneScrollPane高于GUI中的那个,因为getGraphPaneScrollPane是画布,我用它来绘制节点。
答案 0 :(得分:1)
我希望situationPanel是透明的,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);