2016-10-06 10 views
-1

JPanel内に配置した画像を中央に配置しようとしています。swingでは、paintComponent()内のJPanelのWidthプロパティとHeightプロパティを見つけることはできますか?

 int x = (this.getWidth() - pic.getWidth(null))/2; 
     int y = (this.getHeight() - pic.getHeight(null))/2; 
     g2.drawImage(pic, x, y, null); 

しかし、画像がまだ揃っCENTERされていません。私のpaintComponentでは()、私はこれらの行を持っています。私はthis.getWidth()とthis.getHeight()を出力しました。これはJPanelではなく、画像そのものの次元を与えてくれます。

理想的なソリューションは次のようになります。これらのプロパティは、別のクラスにあるので、私はJPanelのの幅と高さへのアクセスを持っていない

 int x = (JPANEL.GETWIDTH() - pic.getWidth(null))/2; 
     int y = (JPANEL.GETHEIGHT() - pic.getHeight(null))/2; 
     g2.drawImage(pic, x, y, null); 

しかし、私の問題を。

JPanelの幅と高さを保存して設定したインスタンス変数を作成しようとしました。しかし、ウィンドウのサイズを変更すると、JPanelの元の幅と高さが使用されます。ウィンドウのサイズを変更するときに、新しいJPanelのサイズに合わせてコードを更新する方法がわかりません。何か案は?

+0

私の出力は以下です:のJPanelの600、実際の幅:これを使用して702 高さ:400、のJPanelの実際の高さ:その場合は540 – dan139

+0

IもJPanelのに好適なサイズと最小サイズを設定し、これを用いて 幅何かに影響します。 – dan139

+0

これらのコメントは質問に編集する必要があります。質問タグの下にある 'edit'リンクを探します。 –

答えて

1

私はthis.getWidth()とthis.getHeight()を出力しました。これはJPanelではなく、画像そのものの寸法を与えてくれます。

いいえ、これらのメソッドは、画像のパネルの幅と高さを指定しません(これを行うカスタムコードがない限り)。

たとえば、Background Panelを使用すると、画像の中心を合わせることができます。

画像を中央に配置する簡単な方法は、GridBagLayoutを使用してパネルを作成することです。次に、ImageIconを使ってJLabelを作成し、そのラベルをパネルに追加します。デフォルトでは、コンポーネントは中央に配置されます。

描画メソッドが呼び出されたときに画像が読み込まれないことがあります。

g2.drawImage(pic, x, y, null); 

上記のようになります。

g2.drawImage(pic, x, y, this); 

「これは」イメージがロードされているとしてコンポーネントが再描画されますことを確認します。

カスタムペイントコードの詳細については、SSCCEを送信してください。

それが何かに影響を与える場合、私はまた、あなたが適切なサイズを設定しないでください。.. JPanelの上

を推奨サイズと最小サイズを設定します。望ましいサイズを決定するのはレイアウトマネージャの仕事です。

カスタムペイントを行うときは、パネルのgetPreferredSize()メソッドをオーバーライドしてイメージのサイズを返す必要があります。しかし、ペイントコードでは、パネルのサイズが推奨サイズと異なる状況に対処するために画像の位置を計算する必要があります。

関連する問題