Java 如何拥有一个透明的JTextField?
这是我在这里的第一篇帖子,如果这样问不对,我很抱歉。我想提出改进建议 说到这个问题,我看到了一个关于透明Jtextfield的youtube视频(),但是相同的代码没有给出相同的输出Java 如何拥有一个透明的JTextField?,java,swing,jtextfield,transparent,Java,Swing,Jtextfield,Transparent,这是我在这里的第一篇帖子,如果这样问不对,我很抱歉。我想提出改进建议 说到这个问题,我看到了一个关于透明Jtextfield的youtube视频(),但是相同的代码没有给出相同的输出 import javax.swing.*; import java.awt.*; public class TextField3 { public TextField3() { ImageIcon icon = new ImageIcon("pi
import javax.swing.*;
import java.awt.*;
public class TextField3 {
public TextField3() {
ImageIcon icon = new ImageIcon("pic1.jpg");
//JLabel l1 = new JLabel();
//l1.setBounds(0, 0, 900, 500);
//l1.setIcon(icon);
Color back = new Color(0, 0, 0, 80);
Color fore = new Color(255, 255, 255);
Font font = new Font("Times New Roman", Font.BOLD, 24);
JFrame f1 = new JFrame("My First TextField");
f1.setBounds(150, 50, 900, 500);
//f1.setVisible(true);
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f1.getContentPane().setLayout(null);
JLabel l1 = new JLabel();
l1.setBounds(0, 0, 900, 500);
l1.setIcon(icon);
JTextField tf = new JTextField("TextField");
//tf.setOpaque(false);
tf.setBounds(275, 150, 350, 60);
tf.setVisible(true);
tf.setHorizontalAlignment(JTextField.CENTER);
tf.setBackground(back);
tf.setForeground(fore);
tf.setFont(font);
f1.add(l1);
f1.add(tf);
f1.setVisible(true);
}
public static void main(String[] args) {
TextField3 tf = new TextField3();
}
}
上面的代码与视频的代码不完全相同。实际上视频中的代码生成了一个空白的JFrame,然后我将代码的JLabel部分移到JFrame部分的下面,然后它在第二幅图像中生成了输出
我搜索了这个问题,发现set不透明为false可以解决这个问题。但当我尝试时,JTextField完全消失,只显示背景图像。有人能帮助解决这个问题吗?您需要使用
setOpaque(false)
方法使JTextField透明。这应该行得通。Swing设计用于布局管理器。您不应该使用空布局,也不应该使用setBounds()
Swing是基于父/子关系设计的。如果希望文本字段显示在标签顶部,则不要将两个组件都添加到框架中。相反,您需要一个如下结构:
- frame
- background label
- text field
因此,您的基本代码应该是:
JTextField textField = new JTextField("text");
textField.setBackground(...);
JLabel background = new JLabel(...);
label.setlayout( new GridBagLayout() );
label.add(textField, new GridBagConstraints());
frame.add(label, BorderLayout.CENTER);
现在,您将看到标签中心的文本字段
但是,文本字段的半透明背景仍然存在问题,因为Swing不能正确处理半透明。有关更多信息和解决方案,请查看:我已经尝试过,正如您在代码中看到的,它已被注释掉。当我添加该行时,JTextField完全消失,只显示背景图像。但问题是,当我添加setOpaque(false)时,textfield和文本也不显示。代码的结构完全错误。您没有遵循Swing设计原则。我已经在回答中更详细地解释了问题。谢谢你的帮助,我现在明白了。你能链接一些资源来正确学习swing吗?@MayankGoyal,很高兴它能帮上忙。先从这个开始。它涵盖了许多Swing基础知识,每个部分都有要下载和测试的演示代码?你可能想用JPanel。@weisj,不,我是想用JLabel。这是一种以实际大小显示图像并在顶部显示组件的简单方法,无需进行任何自定义绘制。查看此方法的局限性。