0

我的程序代码在这里:

package Chapter12;

import java.awt.*;
import javax.swing.*;

public class Pv2 extends JPanel {

    public static void main (String []args){

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500,500);
        frame.setVisible(true);
        frame.setContentPane(new Pv2());




    }

    @Override
    public void paintComponent(Graphics g){

        Graphics2D g2 = (Graphics2D) g;
    }



}

当我尝试编译代码时,Eclipse 会显示此错误。

Cannot cast from Graphics to Graphics2D

此错误发生在此行:

Graphics2D g2 = (Graphics2D) g;

尝试过 jre 1.6 和 jre 1.7 - 同样的事情。为什么不允许演员表?我什至尝试下载一些准备好的代码,但错误是一样的。

4

1 回答 1

1

你的代码没有被破坏,这个演员肯定是可能的。以下代码有效:

import java.awt.*;
import javax.swing.*;

public class Pv2 extends JPanel {
    public static void main (String []args){
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(200,200);
        frame.setVisible(true);
        frame.setContentPane(new Pv2());
    }
    public void paintComponent(Graphics g){
        Graphics2D g2 = (Graphics2D) g;
        g2.drawLine(0,0, getWidth(), getHeight());
    }
}

图形演员作品

一种可能的解释是,您将类命名为完全相同GraphicsGraphics2D在同一个包中 ( Chapter12)。然后,有了导入,这个类将具有优先权;如果不兼容,编译器将拒绝强制转换。我能够通过在同一个包中创建空类并命名它来重现这一点Graphics2D

要解决,请使用显式导入:将导入语句替换为

import java.awt.Graphics;
import java.awt.Graphics2D;

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

这将告诉编译器GraphicsGraphics2D的意思是什么。即使Graphics2D类令人困惑,在重写导入后我也不再看到错误,如图所示。

于 2013-01-27T13:06:13.403 回答