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
的实例,因此它不可能绘制 中的内容。
方法。game
的 Paint
无论如何,您通常不想创建 JFrame
的子类来进行自定义绘画,只需创建 JPanel
的子类,并将其设置为框架。
也不要重写paint
,而是重写paintComponent
,它是负责绘制当前组件的方法。
您还应该调用 paintComponent
的父方法,以确保所有常规清理正确进行。
按照惯例,类名应以大写字母开头。
最后一件事,仅在添加所有组件后才使框架可见,否则有一天您可能会遇到视觉故障。
把它们放在一起:
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);
}
}
关于java - java中的paint()没有显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53942993/