java - GUI 中重叠的 JPanel

标签 java swing user-interface netbeans 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;
}

现在我希望在 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/

相关文章:

java - 如何将 2 个 SegmentedTimelines 合并为 1?

java - 如何将JPanel类集成到JFrame类中?

java - 未从 JTable 中删除的行

android - gridlayout 的子级可见性消失了

python - 执行 GUI onclick 命令时,将变量值从一个模块返回到另一个模块时出现问题

java - Android/Java线程同步: while(true){} causing blocking

java - -bash : syntax error near unexpected token `('

java - Steam 等跨平台桌面应用程序 - 可用的技术有哪些

user-interface - 最喜欢的图形子系统编程

java - 如何使用 Spring-data-Redis 实现 Redis Multi-Exec