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