0

メイン フレームを閉じながら、stage2 という名前の新しいフレームを開こうとしています。しかし、そこに main.setVisible(false) を配置すると、囲んでいるクラスではなく、メインフレームによって呼び出された jpanel クラスにこのリスナーを配置しました。このように見えるので..

class main extends JFrame()
{
   main()
     {
     }
   add(story2)
}

class story2 extends JPanel()
{
    public void mouseClicked(MouseEvent e)
            {

                 new stage2(); 
                 main.this.setVisible(false);
            }
}
4

1 に答える 1

0

これは、story2実際には の内部クラスではないためですmain。JComponent のgetTopLevelAncestor()を使用して、JFrame へのハンドルを取得し、JFramestory2で必要なことを行う必要があります。このようなもの:

((JFrame)this.getTopLevelAncestor()).dispose();

main( JFrame がもう必要ない場合は、リソースとメモリを解放するために、dispose()単に , を使用するよりも優れています。)setVisibke(false)

上記のコードサンプルは単なるデモンストレーションです。もちろん、本番対応のアプリでは、最上位の祖先が JFrame (または少なくとも Window) にキャストできることを最初に確認する必要があります。

于 2013-06-18T05:32:14.470 に答える