Java 使JTextField背景透明
我试图使JTextField的背景透明,这样它下面的JLabel仍然可见,但是每当在JTextField中输入文本时,您都可以看到文本。这是我现在的基本情况 在下图中,JTextField背景设置为黑色。 理论上,如果JTextField的背景是透明的,它应该是这样的。Java 使JTextField背景透明,java,swing,jtextfield,Java,Swing,Jtextfield,我试图使JTextField的背景透明,这样它下面的JLabel仍然可见,但是每当在JTextField中输入文本时,您都可以看到文本。这是我现在的基本情况 在下图中,JTextField背景设置为黑色。 理论上,如果JTextField的背景是透明的,它应该是这样的。 所以,我的问题是如何使JTextField的背景透明 此示例使用的是简单的setOpaque(false)。标签文本始终可见。我用Java1.7和1.8测试了它。所以,如果它对你不起作用,你还做了什么来初始化你的框架 pub
所以,我的问题是如何使JTextField的背景透明 此示例使用的是简单的
setOpaque(false)
。标签文本始终可见。我用Java1.7和1.8测试了它。所以,如果它对你不起作用,你还做了什么来初始化你的框架
public class TextField extends javax.swing.JFrame {
public TextField() {
initComponents();
}
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
jLabel1.setText("Test");
getContentPane().add(jLabel1);
jLabel1.setBounds(60, 40, 70, 14);
jTextField1.setText("jTextField1");
jTextField1.setOpaque(false);
getContentPane().add(jTextField1);
jTextField1.setBounds(50, 30, 90, 40);
pack();
}// </editor-fold>
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new TextField().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JTextField jTextField1;
// End of variables declaration
}
public class TextField扩展了javax.swing.JFrame{
公共文本字段(){
初始化组件();
}
//
私有组件(){
jLabel1=newjavax.swing.JLabel();
jTextField1=newjavax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
jLabel1.setText(“测试”);
getContentPane().add(jLabel1);
jLabel1.立根(60,40,70,14);
jTextField1.setText(“jTextField1”);
jTextField1.setOpaque(false);
getContentPane().add(jTextField1);
jTextField1.立根(50,30,90,40);
包装();
}//
公共静态void main(字符串参数[]){
/*创建并显示表单*/
invokeLater(new Runnable()){
公开募捐{
new TextField().setVisible(true);
}
});
}
//变量声明-不修改
私有javax.swing.JLabel jLabel1;
私有javax.swing.JTextField jTextField1;
//变量结束声明
}
将“外观和感觉”设置更改为“金属”或“窗户”
如果您已经将其设置为透明,它将工作
Nimbus laf使textareas背景在程序运行时立即可见。看起来Nimbus在JTextField、JTextArea等中不支持透明背景。这里的代码不是使背景透明,而是使组件设置其背景颜色以匹配其父级背景:
private static final HierarchyListener _hl = new HierarchyListener() {
@Override
public void hierarchyChanged(HierarchyEvent e) {
Component c = e.getComponent();
for (Component p = c; p != null; p = p.getParent()) {
if (p.isOpaque()) {
int bk = p.getBackground().getRGB();
c.setBackground(new Color(bk));
break;
}
}
}
};
public static void makeComponentCopyParentBackground(Component c) {
c.removeHierarchyListener(_hl); // Guard against client calling multiple times.
c.addHierarchyListener(_hl);
}
您是否使用了.setOpaque(false)?是的,我确保将其设置为false.setColor(新颜色(0,0,0,0));这不是一个有效的颜色标识符。@Noob这是一个非常危险的建议,因为绘制引擎不知道当顶层组件发生更改时,它需要通知下面的组件进行自我更新,从而导致重新绘制问题和瑕疵。我发现了这一点,在初始化框架时它做到了这一点。。setLookAndFeel(info.getClassName());为什么没有挫折?我没有使用任何布局管理器。为什么不这样放置我的组件呢?它也适用于JTextArea,只有一行
textArea.setOpaque(false)代码>Mac OS X laf也支持透明背景。光环似乎是个问题。