无法在JFrame中使用drawString()打印任何字符串

时间:2014-03-12 14:28:58

标签: java swing jframe paintcomponent drawstring

我试图找到这个短代码的问题。我无法使用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();
    }

}

1 个答案:

答案 0 :(得分:3)

JFrame 没有paintComponent方法。因此,您不能覆盖任何,而不会进行绘画。

关于该注释JPanel 有<{1}}方法,您应该在paintComponentJComponent上绘画,其中 有方法。您不想在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