0

JPanel の背景の 1 つを作成した画像に変更し、その上にコンポーネントを追加できるようにしたいのですが、それらが表示されません。

package userInterface;

import javax.swing.*;
import java.awt.*;

@SuppressWarnings("serial") public class BoardPanel extends JPanel {

  private Image img;

  public BoardPanel() {
    img = new ImageIcon("images/board.png").getImage();
    JButton button = new JButton("TEST ME");
    add(button);

    Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
    setPreferredSize(size);
    setMinimumSize(size);
    setMaximumSize(size);
    setSize(size);
    setLayout(null);
  }

  public void paintComponent(Graphics g) {
    g.drawImage(img, 0, 0, null);
  }

}
4

2 に答える 2

1

の非表示の理由は、 のレイアウトを次のように設定しているJButtonためです。JPanelJPanelnull

setLayout(null);

レイアウトを にnull設定すると、コンポーネントの場所を明示的に設定することになりますが、これも非常に悪い習慣です。代わりに、その行を削除して、 の内部layoutSwing正常に機能するようにする必要があります。
補足として、メソッドをオーバーライドするときはいつでもpaintComponent、このメソッドの最初のステートメントはsuper.paintComponent(g)

于 2013-05-01T18:24:41.060 に答える
1

を上書きする場合は、常に最初paintComponent(Graphics g)に呼び出すことを忘れないでください。super.paintComponent(g)そうすれば、通常ペイントされるすべてのものも同様にペイントされます。

于 2013-05-01T18:18:14.693 に答える