在框架中绘制一个字符串。

时间:2015-01-26 14:13:08

标签: java string swing draw

我正在研究如何用Java编程。目前我在Swing的一章。我正在尝试使用下一个代码在框架中绘制一个字符串。

有人可以告诉我哪里出错了吗?

代码

package paquete_swing;

import javax.swing.*;
import java.awt.*;

public class graficos {
    public static void main(String[] args) {
        MarcoConTexto primer_texto = new MarcoConTexto();
        primer_texto.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    }

class MarcoConTexto extends JFrame {    
    public MarcoConTexto (){
        setVisible(true);
        //setBounds(400, 200, 600, 450);
        setSize(600,450);
        setLocation(400, 200);
        setTitle("Primer Texto");
        lamina milamina= new lamina();
        add(milamina);
    }
}


class lamina extends JPanel{
    public void paintComponents(Graphics g) {
            super.paintComponents(g);
            g.drawString("Mi primer texto en una lamina de java",100 ,100 );
    }
}

1 个答案:

答案 0 :(得分:2)

当然,我会指出错误。

  1. 您必须始终通过调用SwingUtilities invokeLater方法启动Swing应用程序。这可确保在Event Dispatch thread (EDT)上创建和更新Swing组件。

  2. 班级名称以大写字母开头。这允许您和我们从方法名称或变量名称中告诉类名称。

  3. 正如其他人所说,必须按特定顺序调用JFrame方法。我重新安排了你的JFrame方法调用。

  4. 您使用Swing组件。除非要覆盖其中一个组件方法,否则不要扩展Swing组件,就像我们在Lamina类中一样。我使用了JFrame。

  5. 我指定尺寸的唯一地方是Lamina绘制JPanel。您可以使用Swing layouts将Swing组件放在JFrame或JPanel中。

  6. 您覆盖了paintComponents方法而不是paintComponent方法。这是一个容易犯的错误。

  7. 这是带有更正的可运行代码。

    package paquete_swing;
    
    import java.awt.Dimension;
    import java.awt.Graphics;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    
    public class Graficos implements Runnable {
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Graficos());
        }
    
        @Override
        public void run() {
            JFrame frame = new JFrame();
            frame.setTitle("Primer Texto");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            Lamina milamina = new Lamina();
            frame.add(milamina);
    
            frame.setLocationByPlatform(true);
            frame.pack();
            frame.setVisible(true);
        }
    
        public class Lamina extends JPanel {
    
            private static final long serialVersionUID = 4553173187556864421L;
    
            public Lamina() {
                this.setPreferredSize(new Dimension(400, 200));
            }
    
            @Override
            public void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.drawString("Mi primer texto en una lamina de java", 100, 100);
            }
        }
    }