-2

このコードの問題は、これを実行するたびにコンパイル エラーが表示されることです。

シンボルが見つかりません: コンストラクター mywindowadapter(frame1)

場所:クラス mywindowadapter

mywindowadapter mwa=new mywindowadapter()"

import java.awt.*;
import java.awt.event.*;
/*<applet code=frame2 width=500 height=500>
</applet>*/
class frame2 extends Frame
{
    frame2(String title)
    {
        super(title);
        mywindowadapter mwa=new mywindowadapter();
        addWindowListener(mwa);     
    }
    public static void main(String ar[])
    {
        frame2 f=new frame2("my frame");
        f.setVisible(true);
        f.setSize(200,100);
    
     }
    public void paint(Graphics g)
    {
        g.drawString("hello frame",60,70);
    }
}
class mywindowadapter extends WindowAdapter
{

    mywindowadapter()
    {
        frame2 f=new frame2();  
    }
    public void windowClosing(WindowEvent we)
    {
        f.setVisible(false);
        System.exit(0);
    }
} 

以下のコードは、上記のコードの修正版です。前のコードで生成されたエラーを理解できません。助けてください!!

import java.awt.*;
import java.awt.event.*;
/*<applet code=frame2 width=500 height=500>
</applet>*/
class frame2 extends Frame
 {
    frame2(String title)
    {
        super(title);
        mywindowadapter mwa=new mywindowadapter(this);
        addWindowListener(mwa);     
    }
    public static void main(String ar[])
    {
        frame2 f=new frame2("my frame");
        f.setVisible(true);
        f.setSize(200,100);
    
    }
   public void paint(Graphics g)
    {
        g.drawString("hello frame",60,70);
    }
}
class mywindowadapter extends WindowAdapter
{
    frame2 f;
    mywindowadapter(frame2 f)
    {
        this.f=f;   
    }
    public void windowClosing(WindowEvent we)
    {
        f.setVisible(false);
        System.exit(0);
    }
}   
4

2 に答える 2

0

frame2 にはデフォルトのコンストラクターがなく、アダプターで使用しようとしています。

frame2 のデフォルトのコンストラクターを提供するか、既存のコンストラクターに適切な引数を渡します。

最初のコードには確かに多くのコンパイル エラーがあります。修正してください。windowClosing() と同様に、f を参照することはできません。

于 2013-03-23T07:49:20.673 に答える
0

私にとっては、mywindowadapter引数を持つコンストラクターを持つクラスと引数のないコンストラクターを持つクラスの 2 つのバージョンがあるようです。そして、両方とも同じパッケージに入っています。したがって、引数なしのコンストラクターをコンパイルするmywindowadapterと、他のコンストラクターが上書きされます。

また、引数を持つコンストラクターを持つクラスが、そのコンストラクターを呼び出しているパッケージにない可能性があります。

これらのケースのいずれかであるかどうかを確認してください。

于 2013-03-23T08:04:15.833 に答える