java 中的 paint() 没有显示

paint() in java with no display

import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;




class game extends JFrame {
    public game(){   //this is constructor
        JFrame frame  = new JFrame();
        frame.setVisible(true);
        frame.setSize(500,500);
        frame.setTitle("Hello world");
    }

    public void paint(Graphics g){
        Graphics2D g2 = (Graphics2D) g;
        Line2D line = new Line2D.Double(60,90,150,100);
        g2.draw(line);


    }


    public static void main(String args[]) {

        game l = new game();

    }


}

以上代码在 java 中编译,但在 运行 代码中它只显示框架及其标题,但不包括使用 Graphics2D 和 Line2D 绘制的任何线条,犯了什么错误???正在显示的框架没有显示任何内容,这是为什么???

首先,您正在创建并显示一个 JFrame,它不是 game 的实例,因此它不可能绘制您在 paint 方法中拥有的内容game.

你通常不想创建JFrame的子class来自定义绘画,只需创建JPanel的子class,然后设置它作为框架的内容窗格。

也不要覆盖paint,而是覆盖paintComponent,这是负责绘制当前组件的方法。

您还应该调用 paintComponent 的父方法,以确保正确执行所有常规清理。

同样按照惯例,class 名称应以大写字母开头。

最后一件事,只有在添加了所有组件后才使框架可见,否则有一天您可能会遇到视觉故障。

把它们放在一起 :

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Line2D;

import javax.swing.JFrame;
import javax.swing.JPanel;

class Game extends JPanel {

    @Override
    public void paintComponent(final Graphics g) {

        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(Color.BLACK);
        Line2D line = new Line2D.Double(60, 90, 150, 100);
        g2.draw(line);

    }

    public static void main(final String args[]) {

        Game l = new Game();

        JFrame frame = new JFrame();

        frame.setSize(500, 500);
        frame.setTitle("Hello world");

        frame.setContentPane(l);

        frame.setVisible(true);

    }

}

JFrame class 的构造函数调用方法中使用此关键字,因为您在 class.

中扩展了 JFrame class
public game(){   //this is constructor
/*JFrame frame  = new JFrame();
frame.setVisible(true);
frame.setSize(500,500);
frame.setTitle("Hello world");*/
    this.setVisible(true);
    this.setSize(500,500);
    this.setTitle("Hello world");
}

这解决了您的问题。

您不需要创建 JFrame 的实例 class , 修改您的构造函数,如下所示

public game(){   //this is constructor
   setVisible(true);
   setSize(500,500);
   setTitle("Hello world");
}