0

私はクラス迷路(JPanelを拡張)を持っています。このクラスの変数を新しい変数に置き換える「新しい」ボタンを作成したいと思います。

    btnNewMaze.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            maze.repaint();
            maze = new Maze((int) xSpinner.getValue(), (int) ySpinner.getValue());  
            maze.repaint();
        }
    });

他のボタンは正常に動作します。しかし、これは正しく機能しません - 再描画しない、メソッドが例外をスローするなど。どうすればこれを解決したり、別のコードに置き換えたりできますか?

4

3 に答える 3

2

どういうわけか、ボタンが押されたときに、可視コンテナー (JPanel など) に既に追加されている迷路オブジェクトを新しい迷路インスタンスに置き換えることが必要だと思います。

その場合、この「迷路」オブジェクトが既にコンテナー (たとえば、JPanel) に追加されている場合、提供したコードを実行すると、つまり: maze = new Maze(...)、古い迷路オブジェクトはコンテナに追加されたままになり、影響を受けません。コンテナーは、古い迷路オブジェクトへの内部参照を引き続き保持します。

実際、コード maze = new Maze(...)が実行されると、以前の maze オブジェクトの置換ではありません。実際には、参照変数mazeが新しい Maze() オブジェクトを指しているのに対し、古いインスタンスはコンテナーにアタッチされたままです。

コンテナにすでに追加されている古い迷路オブジェクトを置き換えたい場合は、コンテナから削除して新しいものを追加する必要があります。

これがすべてではありませんが、提供された情報から理解できたことです。詳細を教えてください (クラスまたはメソッド全体、スローされた例外、何をしようとしているのかなど)。

于 2012-05-17T16:33:21.860 に答える
1

JButtonあなたが提供したコードにも a が表示されません。ボタンが必要な場合は、(他のオブジェクトと同様に) ボタンを作成し、適切なコンテナに追加する必要があります。

于 2012-05-17T16:20:55.253 に答える
1

インスタンスがパネルに追加されたと仮定するmazeと、新しいインスタンスに置き換える前にパネルからインスタンスを削除する必要があります。

this.remove(maze);
maze = new Maze(....);
this.add(maze, ...);
于 2012-05-17T16:35:43.570 に答える