【问题标题】:Can't print any string using drawString() in JFrame无法在 JFrame 中使用 drawString() 打印任何字符串
【发布时间】:2014-03-12 14:28:58
【问题描述】:

我试图找出这个短代码有什么问题。我无法使用drawString() 方法在JFrame 中打印字符串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();
    }

}

【问题讨论】:

    标签: java swing jframe paintcomponent drawstring


    【解决方案1】:

    JFrame 没有没有paintComponent 方法。所以你不会重写任何东西,也不会完成绘画。

    关于 JPanel 确实有一个 paintComponent 方法,你应该在 JComponentJPanel 上绘画,确实有方法。你不想在像JFrame 这样的顶级容器上绘画。 (如果你真的需要知道,正确的覆盖方法是paint for JFrame)。

    话虽如此,您还应该在paintComponent 方法内调用super.paintComponent,这样您就不会破坏油漆链并留下油漆工件。


    旁注

    • 作为一个好的做法,使用@Override 注释,这样你就知道你正确地覆盖了一个方法。您会看到paintComponent 不会覆盖JFrames 方法之一。

    • setVisible(true)添加你的组件之后。

    • panel.setBounds(0,0,500,500); 绝对不会做任何事情,因为JFrame 有一个默认的BorderLayout

    • 遵循 Java 命名约定并使用大写字母作为类名。

    • 从事件调度线程运行 Swing 应用程序。更多信息请访问Initial Threads


    最终

    import javax.swing.*;
    import java.awt.*;
    
    public class Sample extends JFrame {
    
        private JPanel panel;
    
        public Sample() {
            setSize(500, 500);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
    
            panel = new JPanel() {
                @Override
                public void paintComponent(Graphics g) {
                    super.paintComponent(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);
                }
            };
    
            Container mainP = getContentPane();
            mainP.add(panel);
            panel.setBackground(Color.WHITE);
            setVisible(true);
        }
    
        public static void main(String args[]) {
            SwingUtilities.invokeLater(new Runnable(){
                public void run() {
                    new Sample();
                }
            });  
        }
    }
    

    【讨论】:

    • 第二段中paingComponent 的拼写错误。希望我能 +2 以获得好的答案,然后给出额外的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多