Java 我的GUI程序有什么问题
我已经看了这个代码好几个小时了,但不知道出了什么问题。它是从教科书上抄下来的。当我点击run时,只有一个空盒子出现。它应该显示汽车,一个在左上角,一个在右下角。方法Java 我的GUI程序有什么问题,java,user-interface,Java,User Interface,我已经看了这个代码好几个小时了,但不知道出了什么问题。它是从教科书上抄下来的。当我点击run时,只有一个空盒子出现。它应该显示汽车,一个在左上角,一个在右下角。方法paintComponent拼写错误,因此它不会覆盖超类方法。因此,只调用绘制空白框的默认方法 有一种方法可以通过@Override注释避免这种常见的错误。通过将此注释添加到重写超类方法或实现接口方法的所有方法中,如果您键入错误的方法名称,而不是创建难以调试的错误,编译器将因错误而停止: import java.awt.Graphic
paintComponent
拼写错误,因此它不会覆盖超类方法。因此,只调用绘制空白框的默认方法
有一种方法可以通过@Override
注释避免这种常见的错误。通过将此注释添加到重写超类方法或实现接口方法的所有方法中,如果您键入错误的方法名称,而不是创建难以调试的错误,编译器将因错误而停止:
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Point2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
public class Car {
private int xLeft;
private int yTop;
public Car(int x, int y){
xLeft =x;
yTop=y;
}
public void draw(Graphics2D g2){
Rectangle body = new Rectangle(xLeft, yTop+10, 60, 10);
Ellipse2D.Double frontTire= new Ellipse2D.Double(xLeft+10, yTop+20, 10, 10);
Ellipse2D.Double rearTire= new Ellipse2D.Double(xLeft+40,yTop+20,10,10);
Point2D.Double r1 = new Point2D.Double(xLeft+10,yTop+10);
Point2D.Double r2 = new Point2D.Double(xLeft+20,yTop);
Point2D.Double r3 = new Point2D.Double(xLeft+40,yTop);
Point2D.Double r4 = new Point2D.Double(xLeft+50,yTop+10);
Line2D.Double frontWindshield = new Line2D.Double(r1,r2);
Line2D.Double roofTop = new Line2D.Double(r2,r3);
Line2D.Double rearWindshield = new Line2D.Double(r3,r4);
g2.draw(body);
g2.draw(frontTire);
g2.draw(rearTire);
g2.draw(frontWindshield);
g2.draw(roofTop);
g2.draw(rearWindshield);
}
}
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;
public class CarComponent extends JComponent {
public void paintCompnent(Graphics g){
Graphics2D g2 = (Graphics2D) g;
Car car1 = new Car(0,0);
int x = getWidth()-60;
int y = getHeight()-30;
Car car2 = new Car(x,y);
car1.draw(g2);
car2.draw(g2);
}
}
import javax.swing.JFrame;
public class CarViewer {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(400,500);
frame.setTitle("Two Cars");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
CarComponent component = new CarComponent();
frame.add(component);
frame.setVisible(true);
}
}
将
paintComponent
重命名为paintComponent
谢谢!你是个天才!
@Override
public void paintComponent(Graphics g){
// code here
}