Java Jframe图像&x2B;文本框

Java Jframe图像&x2B;文本框,java,swing,awt,frame,mixing,Java,Swing,Awt,Frame,Mixing,您好,我正在尝试制作一个简单的框架,显示一个图像、一个文本字段和一个按钮,但由于某种原因,文本字段是不可见的,因为我对java甚至这些图形化的东西非常熟悉,您能帮助我吗:) 代码 它被另一个类实例化。问题是,您在没有调用它的super的情况下重写了paint方法,这意味着它永远没有机会绘制 public void paint(Graphics g){ if(img != null) g.drawImage(img, 100, 100, this); else

您好,我正在尝试制作一个简单的框架,显示一个图像、一个文本字段和一个按钮,但由于某种原因,文本字段是不可见的,因为我对java甚至这些图形化的东西非常熟悉,您能帮助我吗:) 代码


它被另一个类实例化。

问题是,您在没有调用它的super的情况下重写了paint方法,这意味着它永远没有机会绘制

public void paint(Graphics g){
    if(img != null)
        g.drawImage(img, 100, 100, this);
    else
        g.clearRect(0, 0, getSize().width, getSize().height);
}
当使用
java.awt.Frame
时,您会发现很难实现所需的功能
java.swingx.JFrame
允许您重写
paintComponent
方法,该方法允许您绘制组件的背景,但
java.awt.Frame
不允许


您还应该避免混合轻重量和重重量组件(我知道,它显然是固定的),但如果可以的话,请避免它。

而不是编写
add(textfield,“South”),我建议编写
add(textfield,BorderLayout.SOUTH)这有两个目的:a)它使代码万无一失,因为任何键入错误都会在编译时出现b)它充当一种隐式文档,这意味着它很容易理解。我可以看一看第二个选项,立即知道您使用的是什么LayoutManager以及您对文本字段所做的操作。您没有使用JFrame,而是使用java.awt.Frame,这是一个巨大的差异
public void paint(Graphics g){
    if(img != null)
        g.drawImage(img, 100, 100, this);
    else
        g.clearRect(0, 0, getSize().width, getSize().height);
}