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(…)
来做另一个测试。这很有效!