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());
    }
}

グラフィック・キャスト作品

考えられる説明の 1 つは、クラスの名前が正確であるGraphicsGraphics2D、同じパッケージ ( Chapter12) にあることです。次に、インポートを使用すると、このクラスが優先されます。互換性がない場合、キャストはコンパイラによって拒否されます。同じパッケージに空のクラスを作成して名前を付けることで、これを再現できましたGraphics2D

解決するには、明示的なインポートを使用します。インポートステートメントを次のように置き換えます

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

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

これは、コンパイラにどちらを意味するかを伝えGraphicsますGraphics2D。紛らわしいGraphics2Dクラスでも、示されているようにインポートを書き直した後、エラーは表示されなくなりました。

于 2013-01-27T13:06:13.403 に答える