JTextField的透明度无法正常工作

时间:2013-12-01 21:18:46

标签: java swing opacity jtextfield

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

我的代码:

//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);

图像仍在发生的事情:

enter image description here

以前见过这个或者知道如何解决这个问题的人?我环顾四周,但没有人遇到和我一样的问题。他们的修复对我来说不起作用。 (我知道我没有使用JPasswordField来获取密码,这是暂时的)

3 个答案:

答案 0 :(得分:3)

基本上,无论不透明设置如何,文本字段的UI委托不仅会绘制文本,还会绘制字段区域(在边框内)。

您可以做的是将背景颜色设置为透明值,例如new Color(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);

您可以通过更改最后一个参数来影响颜色的透明度,例如new Color(255, 255, 255, 128)会变白,50%透明......

您可能还希望更改插入符号颜色,请查看JTextComponent#setCaretColor以获取更多详细信息

答案 1 :(得分:3)

不知道你尝试了什么,为了更好地帮助发布SSCCE,请简短。 runnable,可编译setBackground而不是Image

enter image description here

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();
            }
        });
    }
}

答案 2 :(得分:0)

我尝试了另一个选项,它对我有用。

您可以修改Background的属性textfield。在选择框中选择选项自定义代码,然后将new Color(0, 0, 0, 0)粘贴到txtField.setBackground属性中。

然后只需将border属性更改为No border。最后取消选中opaque复选框。

Here a capture of my netbeans interface