簡體   English   中英

在框架中繪制一個字符串。

[英]Draw a String in a Frame.

我正在研究如何用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. 您必須始終通過調用SwingUtilities invokeLater方法來啟動Swing應用程序。 這確保了在事件調度線程(EDT)上創建和更新了Swing組件。

  2. 類名以大寫字母開頭。 這使您和我們都能從方法名或變量名中分辨出一個類名。

  3. 正如其他人所說,必須按一定順序調用JFrame方法。 我已經重新安排了您的JFrame方法調用。

  4. 您使用Swing組件。 除非您像Lamina類中那樣重寫了組件方法之一,否則您不會擴展Swing組件。 我使用了一個JFrame。

  5. 我指定的唯一位置是Lamina工程圖JPanel。 您可以使用Swing布局將Swing組件放置在JFrame或JPanel中。

  6. 您覆蓋了paintComponents方法而不是paintComponent方法。 這是一個容易犯的錯誤。

這是帶有修正的可運行代碼。

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);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM