Java中的paint(),不显示

时间:2018-12-27 09:50:42

标签: java swing jframe paint graphics2d

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绘制的任何线条,这是怎么回事? ?显示的框架没有显示任何内容,为什么????

3 个答案:

答案 0 :(得分:3)

首先,您要创建并显示一个JFrame而不是game的实例,因此它不可能描绘{{1} 1}}。

无论如何,您通常通常不想创建paint的子类来进行自定义绘画,只需创建game的子类,然后将其设置为框架的内容窗格即可。

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

您还应该调用paint的父方法,以确保所有常规清洁操作均正确进行。

根据惯例,类名也应以大写字母开头。

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

将它们放在一起:

paintComponent

答案 1 :(得分:1)

df = df.reset_index() df.groupby('key').date.apply(lambda x: x.max()) 类的构造函数调用方法中,使用此关键字是因为您在类中扩展了SELECT * FROM ads WHERE (latitude = 26.85005 AND longitude = 26.85393) AND (longitude = 80.94964 AND longitude = 80.96595) HAVING acos(sin(1.3963) * sin(latitude) + cos(1.3963) * cos(latitude) * cos(longitude - (-0.6981))) <= 0.1570 类。

JFrame

这可以解决您的问题。

答案 2 :(得分:0)

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

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