我试图找到这个短代码的问题。我无法使用JFrame
方法在drawString()
中打印字符串 TEXT 。请帮忙 。如果您运行该程序,则只会出现纯白色屏幕。
代码:
import javax.swing.*;
import java.awt.*;
public class sample extends JFrame
{
private JPanel panel;
public sample()
{
setSize(500,500);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
panel =new JPanel();
Container mainP= getContentPane();
mainP.add(panel);
panel.setBounds(0,0,500,500);
panel.setBackground(Color.WHITE);
}
public void paintComponent(Graphics g)
{
Graphics2D eg = (Graphics2D)g;
eg.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
eg.setColor(Color.BLACK);
eg.drawString("TEXT", 40, 120);
}
public static void main(String args[])
{
new sample();
}
}
答案 0 :(得分:3)
JFrame
没有paintComponent
方法。因此,您不能覆盖任何,而不会进行绘画。
关于该注释JPanel
有<{1}}方法,您应该在paintComponent
或JComponent
上绘画,其中 有方法。您不想在JPanel
等顶级容器上绘画。 (如果你真的需要知道,正确的覆盖方法是JFrame
的{{1}}。
话虽这么说,你也应该在paint
方法中调用JFrame
,这样你就不会破坏油漆链并留下油漆文物。
附注
作为良好做法,请使用super.paintComponent
注释,以便您知道正确覆盖方法。您会看到paintComponent
没有覆盖@Override
方法之一。
paintComponent
。
JFrame
绝不会做任何事情,因为setVisible(true)
有默认panel.setBounds(0,0,500,500);
遵循Java命名约定并对类名使用大写字母。
从Event Dispatch Thread运行Swing应用程序。详情请见Initial Threads
FINAL
JFrame