Transparency for JTextField not working

眉间皱痕 提交于 2019-12-20 06:37:37

问题


I'm working on a log in server & my JTextFields aren't transparent when I set Opaque to false.

My code:

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

An Image what is still happening:

Anyone ever seen this before or know how to fix it? I've looked around but no one had the same problem as I do, & the fixes for theirs didn't work for mine. ( I Know I'm not using JPasswordField for password, that's temporary )


回答1:


Basically, the UI delegate of the text field paints not only the text but also the field area (within the border) regardless of the opaque setting.

What you can do, is set the background color to a transparent value, something like new Color(0, 0, 0, 0) for example, which is fully transparent.

For example...

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

You can affect the transparency of a color by changing the last parameter, for example new Color(255, 255, 255, 128) would white, 50% transparent...

You may also wish to change the caret color, take a look at JTextComponent#setCaretColor for more details




回答2:


no idea what you tried, for better help sooner post an SSCCE, short. runnable, compilable with setBackground instead of 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();
            }
        });
    }
}



回答3:


I tried with another option and it worked for me.

You can modify the property Background of the textfield. Select the option custom code in the Selection Box and paste new Color(0, 0, 0, 0)in the txtField.setBackground property.

Then just change the border property to No border. and finally uncheck the opaque checkbox.

Here a capture of my netbeans interface



来源:https://stackoverflow.com/questions/20317387/transparency-for-jtextfield-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!