Java JTextField的透明度不起作用

Java JTextField的透明度不起作用,java,swing,opacity,jtextfield,Java,Swing,Opacity,Jtextfield,我正在使用登录服务器&当我将不透明设置为false时,我的JTextFields是不透明的 我的代码: //username JTextField jUsername = new JTextField(10); jUsername.setBounds(520, 284, 190, 25); jUsername.setOpaque(false); jUsername.setBorder(null); getContentPane().ad

我正在使用登录服务器&当我将不透明设置为
false
时,我的
JTextFields
是不透明的

我的代码:

//username  
    JTextField jUsername = new JTextField(10);  
    jUsername.setBounds(520, 284, 190, 25);  
    jUsername.setOpaque(false);  
    jUsername.setBorder(null);  
    getContentPane().add(jUsername);  

    //password  
    JTextField jPassword = new JTextField(15);  
    jPassword.setBounds(520, 374, 190, 25);  
    jPassword.setOpaque(false);  
    jPassword.setBorder(null); 
    //jPassword.setBackground(new Color(Color.TRANSLUCENT));
    getContentPane().add(jPassword);
正在发生的图像:


有人见过这个或者知道如何修复它吗?我环顾了四周,但没有人和我有同样的问题&他们的修复方案对我不起作用。(我知道我没有使用
JPasswordField
作为密码,这是暂时的)

基本上,文本字段的UI委托不仅绘制文本,而且绘制字段区域(在边框内),而不考虑不透明设置

您可以做的是将背景色设置为透明值,例如
新颜色(0,0,0,0)
,它是完全透明的

例如

JTextField jUsername = new JTextField(10);  
jUsername.setBounds(520, 284, 190, 25);  
jUsername.setBackground(new Color(0, 0, 0, 0));
jUsername.setOpaque(false);  
jUsername.setBorder(null);  
getContentPane().add(jUsername);  

//password  
JTextField jPassword = new JTextField(15);  
jPassword.setBounds(520, 374, 190, 25);  
jPassword.setBackground(new Color(0, 0, 0, 0));
jPassword.setOpaque(false);  
jPassword.setBorder(null); 
//jPassword.setBackground(new Color(Color.TRANSLUCENT));
getContentPane().add(jPassword);
您可以通过更改最后一个参数来影响颜色的透明度,例如
新颜色(255、255、255、128)
将为白色,50%透明


您可能还希望更改插入符号的颜色,请查看更多详细信息

不知道您尝试了什么,为了更好地帮助您,请尽快发布一篇简短的文章。可运行,可使用setBackground而不是Image进行编译

import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;

public class LabelImageText extends JPanel {

    private static final long serialVersionUID = 1L;

    public LabelImageText() {
        JTextField jUsername = new JTextField(10);
        jUsername.setText("MyText");
        jUsername.setOpaque(false);
        //jUsername.setBorder(null);
        add(jUsername);
        JTextField jPassword = new JTextField(15);
        jPassword.setText("MyText");
        jPassword.setOpaque(false);
        //jPassword.setBorder(null);
        add(jPassword);
        setBackground(Color.RED);
    }

    private static void createAndShowUI() {
        JFrame frame = new JFrame("set Opaque");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new LabelImageText());
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                createAndShowUI();
            }
        });
    }
}


我尝试了另一种选择,它对我有效

您可以修改
textfield
的属性
Background
。在选择框中选择选项“自定义代码”,然后在
txtField.setBackground
属性中粘贴
新颜色(0,0,0,0)

然后只需将border属性更改为
无边框
。最后取消选中
不透明
复选框


尝试将文本字段的背景色也设置为透明色,例如
jUsername.setBackground(新颜色(0,0,0,0))
,如中所示。如果您喜欢半透明背景,请使用不同的alpha值,例如
新颜色(255,255,255,128)
将是50%透明的…请填写回答表格,这样我就可以^,我还没试过;)有趣的是,不包括电池:-),真的不记得有任何问题,但是…+1会有问题,@MadProgrammer
,而且我很确定在Windows L&F下也不会有问题,
-非不透明文本字段在使用JDK7的Windows上可以正常工作。也就是说,您只需使用textField.setOpaque(false),父组件就会显示出来。我很惊讶这在Mac LAF上不起作用。对我来说似乎有点问题。@camickr我可能是mac os使用的边框实现有问题。
setColor(…)
?@HovercraftFullOfEels我年轻又愚蠢地使用了@HovercraftFullOfEels实际上,看着它,是试图绕过ui委托忽略不透明度状态,但是当我有时间的时候,我必须用
.setBackground(…)
而不是
。setColor(…)
来做另一个测试。这很有效!