Java Swing透明JPanel问题

2024-05-11

我有一个 JLayeredPane,其中添加了 3 个 JPanel。

我将 JPanel 设为透明(未设置背景并 setOpaque(false))。我在 JPanel 上绘制线条,只有最后添加的 JPanel 上的线条可见。其他 JPanel 的线条通过顶部 JPanel 是不可见的(即使我在添加它们时添加了不同的 zIndex)。

有谁知道这个问题的解决方案吗?为什么它们不透明?

我创建了一个小测试程序(3 个类)。 (TestJPanel 和 TestJPanel1 画了一条线,但位置不同,但我只看到最后添加的 JPanel 的线。我没有看到 2 条线,因为它不透明:( )

主.Java

import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;

public class Main extends JFrame {
  public Main() {
    setSize(400, 350);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    JLayeredPane lp = getLayeredPane();
    lp.setLayout(new BorderLayout());
    TestJPanel top = new TestJPanel();
    top.setOpaque(false);
    TestJPanel middle = new TestJPanel();
    middle.setOpaque(false);
    TestJPanel1 bottom = new TestJPanel1();
    bottom.setOpaque(false);

    lp.add(middle, BorderLayout.CENTER, new Integer(4));
    lp.add(top, BorderLayout.CENTER, new Integer(3));
    lp.add(bottom, BorderLayout.CENTER, new Integer(2));
    // the last one I have added (bottom) is visible and can't see the others through it

    setVisible(true);
  }

  public static void main(String[] args) {
    new Main();

  }
}

TestJPanel.java

import java.awt.Graphics;


public class TestJPanel extends javax.swing.JPanel {

    /** Creates new form TestJPanel */
    public TestJPanel() {
        initComponents();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.drawLine(25, 0, 25, 50);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );
    }// </editor-fold>


    // Variables declaration - do not modify
    // End of variables declaration

}

TestJPanel1.java

import java.awt.Graphics;


public class TestJPanel1 extends javax.swing.JPanel {

    /** Creates new form TestJPanel */
    public TestJPanel1() {
        initComponents();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.drawLine(50, 0, 50, 50);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );
    }// </editor-fold>


    // Variables declaration - do not modify
    // End of variables declaration

}

我真的希望有人能尽快帮助我。与这个问题。


删除线

lp.setLayout(new BorderLayout());

并将您的 add() 调用替换为

lp.add(component, layer);

您错误地使用了 LayeredPane - 使用 LayeredPane,您(通常)不想设置布局。我相信(但必须检查)您只看到一行的原因是,使用 BorderLayout,如果您将多个组件添加到同一区域(例如 BorderLayout.CENTER),则只有您添加的最后一个组件会被定位;其他的则被有效地从布局中删除。

有关更多详细信息,请参阅关于分层窗格的 Swing 教程 http://java.sun.com/docs/books/tutorial/uiswing/components/layeredpane.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Swing透明JPanel问题 的相关文章

随机推荐

  • 对同一解决方案/git 存储库中的项目的 PackageReference

    目前我正在尝试设置一个带有实现类库和抽象项目的解决方案 我想在 nuget org 上找到这两个包 通常 当您只使用 ProjectReferences 时 您只需指向 csproj 随机抽象
  • Angular 2 测试 ng-content

    我想知道是否有办法测试ng content不创建宿主元素 例如 如果我有警报组件 Component selector app alert template div div
  • Rails 5 deviseomniauth-facebook 错误:抱歉,出了点问题

    我按照 Devise 的官方指南从上到下本节 https github com plataformatec devise wiki OmniAuth Overview logout links My CALLBACK URL is http
  • `docker run` 输出到 bash 变量 - 奇怪的行为

    我看到一些奇怪的行为从docker run到 bash 变量中 简单的例子 bin bash PWD docker run rm ti ubuntu pwd 2 gt 1 also tried with PWD docker run wit
  • Kafka Streams 内部数据管理

    在我的公司 我们广泛使用 Kafka 但出于容错的原因 我们一直使用关系数据库来存储多个中间转换和聚合的结果 现在我们正在探索 Kafka Streams 作为一种更自然的方式来做到这一点 通常 我们的需求非常简单 其中一个例子是 监听输入
  • 如何抑制 IE9 window.close() 确认消息

    应用 window close 函数后 IE9 会引发 您正在查看的网页正在尝试关闭 消息 有没有办法在不更改应用程序代码的情况下 而是通过更改一些特定于 IE 的注册表项来抑制此消息 如果窗口不是由脚本打开的 IE 不允许在没有确认的情况
  • iPhone X 上横向的 UICollectionView

    当 iPhone X 横向使用时 您应该检查 safeAreaInsets 以在左侧和右侧制作适当大的装订线 UITableView 有新的insetsContentViewsToSafeArea属性 默认 true 自动将单元格内容保留在
  • BATCH - 从 Windows 命令行获取显示分辨率并设置变量

    echo off set h wmic desktopmonitor get screenheight set w wmic desktopmonitor get screenwidth echo h echo w pause 而不是得到
  • 将嵌套循环计算转换为 Numpy 以加速

    我的Python程序的一部分包含以下代码段 其中一个新的网格 是根据旧网格中找到的数据计算的 网格是二维浮点数列表 该代码使用了三个 for 循环 for t in xrange 0 t step for h in xrange 1 hei
  • Android Wear - 在没有 WearableListenerService 的情况下从 Wear 接收消息?

    我正在开发一款适用于 Android Wear 的应用程序 它可以在手机上启动活动 一切都很好 但我不想依赖手机上不断运行的后台服务来接收此消息 理想情况下 我会让 WearableListenerService 与应用程序同时启动 并保持
  • IIS 7.5 中未显示 ASP.NET 功能

    我在 IIS 7 5 中遇到问题 其中 ASP NET 功能部分未显示在我的 Web 应用程序上 我的环境 Windows 2008 R2 SP1 IIS 7 5 7 5 7600 NET Framework 4 0 我的问题与此处发布的问
  • 如何将 T-SQL 中的结果连接到列中?

    我正在处理一个查询 它应该给我这样的结果 Name Surname Language Date James Hetfield en gb fr 2011 01 01 Lars Ulrich gb fr ca 2011 01 01 但我的选择
  • 导入错误:无法导入名称“PandasError”

    我对在 Mac 上运行的 Python 3x 非常陌生 当前使用 python 金融的 senddex 教程 尝试运行以下脚本 import datetime as dt import matplotlib pyplot as plt fr
  • CSS 选择器在哪个方向进行验证?

    我记得不久前在网上看过一个视频 是雅虎工程师的演讲 他在视频中提到浏览器从右到左读取 CSS 选择器 而不是从左到右 意义 body header links a实际上会拉出页面上的所有锚点 过滤那些具有类父级的锚点links有一个班级的家
  • 我可以将这个 XAML 块变成可重用的“控件”吗?

    我有一个Grid 在那个网格中 我有这个
  • R Shiny UI 子选项复选框?

    我有一个基本的 RShiny 应用程序 它有一个反应式复选框 它根据复选框中选择的数据 df 列 绘制时间序列数据 我当前的代码生成一个带有复选框输入的 UI 如下所示 Load R packages library shiny libra
  • 在tomcat中显示Spring-security的SQL错误

    我使用 spring security 框架创建了一个 Web 应用程序 我设置了一个数据库来存储用户及其角色 但 tomcat 给出以下错误 17 sep 2010 11 56 14 org springframework beans f
  • 如何为 asp.net MVC 5 配置 StructureMap

    我遇到以下错误 我的设置与 asp net mvc 4 类似 没有为此对象定义无参数构造函数 描述 安 当前网页执行期间发生未处理的异常 要求 请查看堆栈跟踪以获取有关的更多信息 错误及其在代码中的起源 异常详细信息 System Miss
  • 如何在视图中调用 Grails 服务?

    简单的问题 我有一个服务类 比方说helpersService 和一个方法def constructURI params 如何从模板视图调用此方法 我尝试了以下代码但没有成功 img src 但我得到以下结果 No signature of
  • Java Swing透明JPanel问题

    我有一个 JLayeredPane 其中添加了 3 个 JPanel 我将 JPanel 设为透明 未设置背景并 setOpaque false 我在 JPanel 上绘制线条 只有最后添加的 JPanel 上的线条可见 其他 JPanel