【问题标题】:Netbeans making a JTextField transparent not working使 JTextField 透明的 Netbeans 不起作用
【发布时间】:2017-10-02 13:52:15
【问题描述】:

我在 JFrame 上放置了一个背景图像,将其作为 JLabel 的图标。但问题是我的文本字段和密码字段没有变得透明。我已经在两个字段的属性中禁用了不透明。它在 netbeans 的预览中看起来像这样https://imgur.com/Yve4E9x

它还生成了代码https://imgur.com/Q1MTkNl

但是当我运行代码实例时,这些字段仍然有自己的白色背景。

https://imgur.com/ICrUCLG

感谢任何帮助。谢谢。

【问题讨论】:

  • 这里的邮政编码是下一个而不是图片

标签: java swing netbeans


【解决方案1】:

Swing 仅支持完全不透明或完全透明的组件,不支持半透明(或基于 alpha)的颜色。

这意味着您需要更改组件的opaque 属性。

将组件的背景颜色设置为基于 alpha 的颜色是一种幼稚的方法,这表明对绘画过程的实际工作方式缺乏了解,并导致更多“意外”问题和更多问题不必要地发布在此处

除了JTextField(可能还有JTextComponents 的家族)似乎是规则的例外。

文本组件的 UI 绘制委托不仅渲染文本,还渲染背景颜色,在某些平台上似乎忽略了 opaque 属性。

在这种情况下该怎么办?好吧,在这种情况下,您必须两者都做。

jTextField1 = new javax.swing.JTextField();
jTextField1.setOpaque(false);
jTextField1..setBackground(new java.awt.Color(255, 255, 255, 0));

您可以在属性表中找到opaque 属性

【讨论】:

    【解决方案2】:

    问题在于 jtextfield 的背景颜色和颜色选择器。它重置颜色的透明组件。

    解决方案: 不要使用颜色选择器。使用“自定义代码”选项。 然后将颜色设置为

    new java.awt.Color(255, 255, 255, 0)
    

    (不透明仍然可以激活)

    您的 initComponents 应该如下所示...

    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
    
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBackground(new java.awt.Color(255, 255, 0));
    
        jPanel1.setBackground(new java.awt.Color(255, 51, 51));
    
        jLabel1.setText("jLabel1");
    
        jTextField1.setBackground(new java.awt.Color(255, 255, 255, 0));
        jTextField1.setText("jTextField1");
        [...]
    

    【讨论】:

    • 成功了。非常感谢您的帮助,非常感谢:)
    • 在 Swing 中使用基于 alpha 的颜色并不是让组件透明的方法,Swing 只遵循 opaque 属性 - 以这种方式使用基于 alpha 的颜色会产生绘画伪影
    • 根据我的研究,您需要结合使用基于 alpha 的颜色并将 opaque 属性设置为 false
    猜你喜欢
    • 2013-12-17
    • 2018-03-09
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    相关资源
    最近更新 更多