0

タイトルがややこしいので、説明してみます。私がやりたいのは、アプリケーションの背景画像を上部中央に固定したままにすることです (x 軸の中央、y 軸の上部のように)。JFrameのサイズが変更された場合でも、これが必要です。ただし、その画像の下に、作成したパターンをウィンドウのサイズに合わせて十分に繰り返したいと思います。

これを行ういくつかの方法を考えました (そして、既に回答されている StackOverflow の質問を使用して) 論理的な解決策を考え出しました。(実際には機能しないため、論理的と言います。)

私はこれを使用します -

 JPanel panel = new JPanel();
  panel.getContentPane(backgroundImage);
  panel.setSize(400, 400); // JFrame arbitrary size.
  panel.getContentPane().setLayout(null);
  panel.setVisible(true);

  int panelX = (panel.getWidth() - panel.getWidth() - panel.getInsets().left - panel.getInsets().right) / 2;
  panel.setLocation(panelX, 0);

これは、これからのソリューションに基づいています-JFrameのJPanelを中央に配置します

このコードの問題は、getContentPane(); を使用しようとするとエラーが発生することです。(エラーは「メソッド getContentPane() は JPanel 型に対して定義されていません」です。)

そして、その JPanel の下に、次のコードを持つ別の JPanel があります -

BufferedImage titledImageFile = ImageIO.read(new File(IMAGE_PATH_TILED));
TiledImage test = new TiledImage(tiledImageFile);

public void paintComponent(Graphics g) {
int width = getWidth();
int height = getHeight();
int imageW = tileImage.getWidth(this);
int imageH = tileImage.getHeight(this);

// Tile the image to fill our area.
for (int x = 0; x < width; x += imageW) {
    for (int y = 0; y < height; y += imageH) {
        g.drawImage(tileImage, x, y, this);
    }
}
}

うまくいけば、私の質問は明確です。私はこれを正しい方法で行っていますか、それとも他にすべきことがありますか? さらに、JFrame をこれで動作させるにはどうすればよいですか?

そして最後に、この質問が反対票を投じられた場合は、説明を残してください。将来的に修正/防止できるようにします。

4

1 に答える 1

1

各パネルを互いの上に構築する必要があります

あなたの から始めてJFrame、 を使用してBorderLayout、あなたをそれに追加しますTitledPane。これにより、タイトル付きペインがフレームのスペース全体を占有できるようになります。

のレイアウトを に設定しTitledPaneますGridBagLayoutJLabel次の制約を使用して、アイコン プロパティが画像に設定されている を追加します...

GridBagConstraints gbc = new GridBagConstraints();
gbc.weightx = 1;
gbc.weighty = 1;
gbc.anchor = GridBagConstraints.NORTH;

また、タイトル付けの結果を別の にキャッシュすると、より高速になりますBufferedImage。パネルが更新されるたびに更新する必要がありますがinvalidated、再描画が高速になります...

于 2013-05-17T09:59:56.473 に答える