2017-01-08 16 views
0

私はJavaでかなり新しいです。私は自分のスクラブルゲームを作成しようとしています。私は自分のクラスのBoardとTileを両方のJPanelを作成しました。Java Swingのrepaint()、addvalidind()の後のrevalidate()の問題Jpanel to Jpanel

Tile tile = new Tile(currentlyChosenLetter, jump); 
board.add(tile); 
tile.setBounds(x * jump + 1, y * jump + 1, jump - 2, jump - 2); 

このすべてのもののようにやってイムが正常に動作しているように見える:

Without repaint

をしかし、追加した後:私のボード上のイム描画タイルながら

board.revalidate(); 
board.repaint(); 

タイルは見当違いです、私タイルを取り除いた場合に再塗りする必要があります。

WithRepaint

xと私のマウス位置から取得Yイム:eはMouseEventのある

int jump = board.getHeight()/15; 
int x = (e.getX()/jump); 
int y = (e.getY()/jump); 

+3

1)* .. "2つの問題があります" *次に2つの質問スレッドを開始します。 SOはQ&Aサイトであり、ヘルプデスクではありません。 2)[mcve]を投稿します(それぞれの質問スレッドに対して、その問題に関連するコードのみを使用します)。 3)明示的な質問をすることを忘れないでください - ** Q **&Aサイト。 –

答えて

1
board.revalidate(); 
board.repaint(); 

revalidate()文はレイアウトマネージャを呼び出し、レイアウトマネージャのルールに基づいて子コンポーネントにサイズと位置が与えられるようにします。 JPanelのデフォルトレイアウトマネージャはFlowLayoutであるため、コンポーネントは1行に表示されます。

so setBounds(...)を使用してください。代わりにGridLayoutのような適切なレイアウトマネージャを使用し、グリッドの各四角形にコンポーネントを追加します。

グリッドごとにJLabelをお勧めします。次に、各ラベルにIconを追加し、指定した四角形のデフォルトアイコンを使用します。文字が追加されると、アイコンがテキストに置き換えられます。

+0

this.setLayout(null);働いた! –

+1

@MaciekTrystuła、あなたは答え全体のポイントを見逃したようでした。 Swingはレイアウトマネージャではなく、ヌルレイアウトで使用するように設計されています。 nullレイアウトを使用する必要はありません。これは、GridLayoutを使用するための完璧なシナリオです。それはあなたのためのすべてのレイアウト管理コードを行います。車輪を再構築しないでください! – camickr