Java Swing - 半透明组件

2024-03-14

我最近问了一个关于半透明组件因看似未正确更新而导致奇怪的工件的问题。我收到的答案导致伪像消失,但以半透明为代价。

解决方案是 - 对于每个半透明组件 - 也调用 setOpaque(false) 函数。这样,Swing 知道它需要重绘这些组件后面的背景。

然而,这是以我试图实现的半透明为代价的。它导致组件变得透明。

前提是这样的:我正在为一个聊天客户端设计GUI,一个功能要求是有一个背景。我通过遵循扩展 JPanel 类的代码片段成功地使背景正常工作,但随后我希望组件允许显示背景。设置半透明度后,更新组件的剩余部分会显示在不应该显示的位置。我来到这里解决了我的问题,但现在我遇到了一个新问题。所以我们到了。

所以,这就是我的猜测:

-为每个所需的组件调用 setOpaque(false) 函数而不设置半透明颜色并不能达到我想要的效果。

- 设置半透明颜色并且不调用 setOpaque(false) 允许显示半透明背景,但会导致伪像,使我回到第一个方向。

因此,我需要在没有伪影的透明和有伪影的半透明之间找到一些中间立场。也就是说,我想要一个没有伪影的半透明背景(不是完全透明)。

看来我需要重写 JFrame 以使其重新绘制所有组件,无论不透明度如何。除非我错过了什么……这就是我来这里的原因!

Thanks!

(这是原始问题的链接,并附有图片供参考:Java Swing - 导致伪像的半透明组件 https://stackoverflow.com/questions/4980246/java-swing-translucent-components-causing-artifacts)


一种选择是覆盖组件并自己绘制背景:

class TranslucentLabel extends JLabel {
    public TranslucentLabel(String text) {
        super(text);
        setOpaque(false);
    }

    @Override
    public void paintComponent(Graphics g) {
        g.setColor(new Color(255, 0, 0, 64));
        Insets insets = getInsets();
        g.fillRect(insets.left, insets.top, 
                getWidth() - insets.left - insets.right, 
                getHeight() - insets.top - insets.bottom);
        super.paintComponent(g);
    }
}

编辑:或者,您可以将子组件的半透明背景色直接绘制到面板上,然后您不必覆盖组件:

class YourPanel extends JPanel {
    @Override
    protected void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D)g.create();

        // Draw your background image here to g2d.

        g2d.setColor(new Color(255, 0, 0, 64));
        Area area = new Area();
        for (Component component : getComponents()) {
            area.add(new Area(component.getBounds()));
        }
        g2d.fill(area);
        g2d.dispose();
    }
}

这种方法有一个缺点。如果组件有真正透明的部分(例如圆形边框),则其整个背景将被着色。

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

Java Swing - 半透明组件 的相关文章

  • Delphi 的免费软件数据透视表组件?

    Delphi 是否有开源或免费软件的数据透视表组件 据我所知 Delphi 没有免费的枢轴组件 在 Torry net 上查找 delphi 中最著名的枢轴组件是 Develop Express 的 ExpressPivotGrid Sui
  • 如何执行更新UI视图Android的后台作业[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在我的 Android 应用程序中 我有一个带有视图的活动 例如 在活动开始或创建主布局时 我想启动一个后台作业 每 5 秒从主布局更
  • 在Java中,在哪里放置代码以在窗口关闭时可靠地触发?

    我有几个窗口 我想在用户采取操作关闭窗口 通过标题栏中的按钮 菜单项或我提供的按钮 之后和处理窗口之前保存默认值 有些窗口我可以DISPOSE ON CLOSE 但有些窗口我需要在它们被dispose 之前提供信息 窗体窗口关闭 http
  • 如何在reactjs中将可选元素作为 prop 传递给组件

    我试图找出正确的 反应 方式来传递一个可选的 prop 该 prop 是一个容器组件的 Element 该组件的处理方式与该组件的子组件不同 举一个简单的例子 我有一个面板组件 它渲染它的子组件 它还有一个可选的 title 道具 为了示例
  • 如何通过 Angular 6 中的服务将对象发送到不相关的组件?

    所以我是 Angular 的新手 我正在尝试使用服务将对象从组件 1 发送到组件 2 当我将结果记录到 component2 中的控制台时 它没有给我对象的更新值 这可能是因为服务在第二个组件中重新初始化 你能帮忙解决这个问题吗 这是我的代
  • 在 JPanel 与 JComponent 中绘图

    我需要一些帮助来理解为什么 JComponent 与 JPanel 中的绘图工作方式不同 import java awt Color import java awt Graphics import java awt Graphics2D i
  • 使用 PIL 对图像进行着色,同时保持透明度?

    好吧 情况是这样的 我想使用 Python 图像库来 主题化 图像 如下所示 Theme color 33B5E5 IN OUT 我使用 ImageMagick 命令得到了结果 convert image png colorspace gr
  • 如何向 JFrame 添加多个组件?

    我有一个JFrame 我也有一个Box扩展的类成分 这个盒子类有一个paint制作填充矩形的方法 当我将多个 Box 组件添加到 JFrame 时 当我调用时仅显示最近添加的一个repaint在 JFrame 上 我查看了布局管理器 但我不
  • 如何使用 Swing GUI 启动 Java MVC 应用程序

    假设我们有一个简单的 Java MVC 应用程序 其中包含以下类Model View and Controller The View类直接继承自JFrame http docs oracle com javase 7 docs api ja
  • Python 滚动文本模块

    我想使用scrolledtext模块创建一个ScrolledText小部件 以便在python中创建GUI 我已经成功创建了 ScrolledText 小部件 但是我无法向其添加水平滚动条 e3 ScrolledText window3 w
  • 动态添加组件到 JDialog

    当用户单击 JDialog 上的按钮时 我在将组件添加到 JDialog 时遇到问题 基本上我希望它看起来像这样 然后 当用户单击 添加新字段 时 我希望它看起来像这样 我似乎无法打开添加新 JLabel 或 JTextField 的对话框
  • 从 Java 监听系统鼠标点击

    我的主要目的是计算特定应用程序上的鼠标点击次数 想象一下 我在 PC 上打开了 Microsoft Word 和 Web 浏览器 我的 Java 代码应该告诉我单击 Word 和 Web 浏览器的次数 我需要应用程序名称和点击次数 我怎样才
  • 用户在对话框中输入

    python 中是否有任何库可用于图形用户输入 我知道关于tk但我相信需要一些代码才能做到这一点 我正在寻找最短的解决方案 a input Enter your string here 取而代之的是 我想要一个对话框 以便用户可以在那里输入
  • 作为属性的自定义类的数组

    我试图使用自定义类的数组作为我的组件的属性 但问题是这些值没有保存到组件中 这意味着如果我设置值 保存所有内容并再次打开项目 组件的值消失 我的代码如下所示 unit Unit1 interface uses Windows ExtCtrl
  • 如何使用Netbeans的不确定进度条样式?

    我正在使用 Nimbus 外观和感觉编写 Java 应用程序 不幸的是 Nimbus 外观和感觉的不确定 JProgressBars 的外观是AWFUL 见下文 另一方面 我注意到 Netbeans 与 Nimbus 的外观和感觉有不同的不
  • Java Swing并发显示JTextArea

    我需要执行 显示从 Arraylist 到 JTextArea 的一系列事件 但是 每个事件的执行时间不同 以下是我的目标的一个简单示例 public void start ActionEvent e SwingUtilities invo
  • 如何将父小部件焦点重定向到子小部件?

    有一个简单的类叫做FloatingPointPropertyEditor 它继承的是QWidget并包含一个QLineEdit带有浮点数验证器的实例 class FloatingPointPropertyEditor public QWid
  • Java 容器删除方法无法正常工作

    我添加了 1 TextArea 2 TextField 然后我开始在容器上连续添加 JButton 现在通过使用 JRadioButton 我想使用此代码从容器中删除 JButton i 0 k 0 while birdButton i i
  • 如何设置按钮的大小?

    我将按钮放在带有 GridLayout 的 JPane 中 然后我用 BoxLayout Y AXIS 将 JPanel 放入另一个 JPanel 中 我希望 GridLayout 中的按钮是方形的 我使用 tmp setSize 30 3
  • Swing JTable:当行可见或滚动到底部时发生事件?

    我正在寻找一种方法 以便在 JTable 滚动时收到通知 以便特定行变得可见 或者在表底部滚动到视图中时失败 理想情况下 这应该在不轮询的情况下完成 而是通过一些事件触发来完成 有任何想法吗 Add a ChangeListener到滚动窗

随机推荐

  • CodeLearn Twitter 教程 TweetAdapter.java 上出现空指针错误

    我目前正在学习 Codelearn Twitter 教程 但我在下面的代码中收到一个空指针 有人可以帮助我吗 public class TweetAdapter extends ArrayAdapter
  • 等待异步 JavaScript 函数返回

    我正在使用第三方库提供的函数 该函数接受一个回调函数作为参数 但我想等待该回调被调用后再继续 有没有标准 可接受的方法来做到这一点 我不确定这是否适合您 但您可以通过将代码分成 2 个函数来实现所需的结果 假设这是您打算做的 基本上这是你原
  • 如何在具有传递性的MySQL连接(同表)中选择不同的对?

    我面临着一个设计非常糟糕的数据库 其中有一个非规范化的表 X 该表 X 应该与另一个表 Y 具有 N M 关系 问题在于 这种关系目前是 1 N 而到目前为止 偷工减料的解决方案是在有多个注册表需要关联时复制条目 简化一下 我有这个 ID
  • 这些代码中哪一段在 Java 中速度更快?

    a for int i 100000 i gt 0 i b for int i 1 i lt 100001 i 答案就在那里这个网站 http www mydeveloperconnection com html JavaTrap htm
  • 关于 NaCL 加密库的问题

    我正在寻找实现加密系统的库 并对使用 NaCl 网络和密码学库特别感兴趣盒子功能 http nacl cr yp to box html 显然 它使用对称加密 XSalsa20 用于公私加密的 Curve25519 和用于身份验证的 Pol
  • 我们如何在 Google Glass 上启用调试模式以在 Google Glass 上测试 Android 应用程序?

    我正在开发谷歌眼镜的应用程序 但我不知道如何在谷歌眼镜中启用调试模式以及如何更改谷歌眼镜上的设置 To connect ADB to Google Glass you have to turn on debug mode on the de
  • > *:first-child 和 > :first-child 之间有功能差异吗?

    编写一段代码时 我注意到在一个地方我写了 gt first child以及后来 gt first child 这两个块看起来都很实用 但是两者之间有区别吗 即使我们考虑性能 它们也是相同的 从规格 https drafts csswg or
  • 绘图和 fill_ Between 的组合图例条目

    这类似于Matlab 结合阴影误差和实线平均值的图例 https stackoverflow com questions 17617190 matlab combine the legends of shaded error and sol
  • 运行 django 教程测试失败 - 没有名为 polls.tests 的模块

    我正在使用 django 1 6 教程 但无法运行测试 我的项目 名称 mydjango 和应用程序结构 名称是 polls 在 virtualenv 中如下所示 nja 文件是由我正在使用的 ninja ide 创建的 init py m
  • 从 Scala 中的 StructType 中提取行标记架构以解析嵌套 XML

    我正在尝试使用spark xml 库将宽嵌套的XML 文件解析为DataFrame 以下是缩写的架构定义 XSD
  • matplotlib 条形图黑色 - 如何删除条形边框

    我正在使用 pyplot bar 但我绘制了很多点 以致条形的颜色始终为黑色 这是因为条形的边框是黑色的 而且条形数量太多 以至于它们都挤在一起 所以您看到的只是边框 黑色 有没有办法删除栏边框以便我可以看到预期的颜色 Set the ed
  • 将日期字符串转换为时间戳以按亚秒精度排序

    我有一个专栏date在 pySpark 数据框中 日期格式如下 2018 02 01T13 13 12 023507 我想将该列中的日期从字符串转换为时间戳 或者我可以根据日期对其进行排序的内容 到目前为止 我已经尝试过以下方法 new d
  • 删除 Airflow Scheduler 日志

    我正在使用 Docker Apache Airflow 版本 1 9 0 2 https github com puckel docker airflow https github com puckel docker airflow 调度程
  • 使用 byte[] 读取大文件会出现错误[重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中对大文件 超过 2GB 进行哈希 SHA1 https stackoverflow com questions 6094306 hash sha1 large files over 2gb
  • .NET 中的时间跨度相乘

    如何在 C 中乘以 TimeSpan 对象 假设变量duration is a TimeSpan http msdn microsoft com en us library system timespan aspx 例如我想要 durati
  • 鼠标悬停在图像上带有文本的 DIV

    好吧 首先 这真的非常类似于http dribbble com http dribbble com主页 以最简单的形式 我有一个图像 我正在尝试对其进行 CSS 处理 以便当我将鼠标悬停在图像上时 会显示一个 DIV 其中包含一些文本和部分
  • 为什么 SpeechRecognizer 突然停止工作?

    我的 Android 应用程序 Xamarin 使用语音识别 这在 Android 8 11 和 12 的智能手机上运行良好 几周以来 我的应用程序的语音识别已停止在 Android 11 上运行 测试了 2 种不同的智能手机 在Andro
  • 如何在 sympy 中求解简并方程组

    我有很多方程组 其中一些未指定 我想找到一个非零解 如果存在 或报告不存在 然而 sympy 似乎在试图找到所有解决方案时停滞不前 这是一个极端的例子 from sympy import A Matrix 0 0 0 0 0 0 0 0 0
  • 确定是否有任何双精度组合从设定总和到目标值

    我在工作中遇到一个问题 让我有点困惑 我需要验证给定的药物剂量可以由药丸剂量大小的任意组合构成 例如 dose 400 0 sizes 15 0 30 0 45 0 400 不能由这些值的任何总和创建 至少我认为这是真的 但是 如果变量更改
  • Java Swing - 半透明组件

    我最近问了一个关于半透明组件因看似未正确更新而导致奇怪的工件的问题 我收到的答案导致伪像消失 但以半透明为代价 解决方案是 对于每个半透明组件 也调用 setOpaque false 函数 这样 Swing 知道它需要重绘这些组件后面的背景