我在我的应用程序中使用 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;
}
现在我希望在 GUI 中,situationPanel 是透明的,而 getGraphPaneScrollPane 位于其上方,因为 getGraphPaneScrollPane 是 Canvas ,我用它来绘制节点。
最佳答案
I want situationPanel to be transparent and getGraphPaneScrollPane to be above that in the GUI,
顶部的面板是需要透明的面板。如果顶部面板不透明,那么您将永远看不到顶部面板下方的面板。
So making changes to the layout is the last thing I want.
嗯,这就是您需要做的。您不能只是将两个面板添加到一个面板中并期望它按照您希望的方式工作。大多数 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);
关于java - GUI 中重叠的 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16555080/