2

マインスイーパを作り直そうとしていますが、地雷カウンターなどの他のコンポーネントを画面に追加すると、ボタンの後ろに数字が表示されなくなります。

この特定のケースでは、2 つの JPanel があります。最初の JPanel には、鉱山カウンターや、ボード (カスタム JButton の列ごとの行の配列) を含む別の JPanel など、複数のコンポーネントが含まれます。

地雷カウンターを追加する前は、すべてが正常に機能しているように見えました。数値は正常に描画され、ロジックは機能していました。しかし、それは私の問題があるところではありません。

私のカスタム JPanel (ラベル、ボードなどを含むパネル) では、paintComponent() メソッドをオーバーライドして、数字を画面に出力しています。しかし、画面に数字を追加する必要がある別の JPanel を追加すると、いくつかの問題が発生しました。

まず、描画しているパネルを区別する方法がわかりませんでしたが、「g = boardPanel.getGraphics()」のような行で修正を見つけたと思います。これが機能する場合、他の場所で問題が発生しています。私が自分の paintComponent() メソッドをどのように構築したかについては、おそらく順序がどのように見えるべきかわかりません。

ここに私が持っているものからのある種のコードがあります:

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g = boardPanel.getGraphics();

    //Draw the lines and numbers behind and separating the tiles. These, in my
    //mind, are drawn to the graphics object regarding the playable board (the
    //board, not the panel including the mine counter, etc.) But, when I click
    //on a tile, there are no mine indicators behind it.

}

要するに、paintComponent() メソッドを構造化する方法がわからないだけだと思います。ボード パネル用のものと、地雷の数とボード パネルを保持するものという 2 つの異なるグラフィックス オブジェクトをいじる必要があるからです。

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

2

JPanel ごとに 2 つの異なるクラスを実装する必要があります。次に、それらは独自の paintComponent() メソッドを持ち、どの JPanel にペイントしているかを「推測」する必要がなくなります。

また、各地雷タイルを JButton として実装するつもりはありませんが、それは別の問題です。

于 2013-05-30T19:16:10.147 に答える