Netbeans使JTextField透明无法正常工作

时间:2017-10-02 13:52:16

标签: java swing netbeans

我将JFrame的背景图像作为JLabel的图标放在JFrame上。但问题是我的textfield和密码字段没有透明。我在两个字段的属性中禁用了opaque。它在netbeans预览中看起来很透明,如https://imgur.com/Yve4E9x

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

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

https://imgur.com/ICrUCLG

感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:1)

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

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

将组件的背景颜色设置为基于alpha的颜色是一种天真的方法,它表明对绘画过程实际如何工作缺乏了解,哪些导致更多“意外”问题,并且在此处不必要地发布了更多问题< / p>

除此之外,JTextField(可能是JTextComponent的家族)似乎是规则的例外。

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

在这种情况下该怎么办?那么,在这种情况下你必须做到这两点。

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

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

答案 1 :(得分:0)

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

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

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");
    [...]