0

JPanelの上にを追加する際に問題が発生しましたImage。これが私がやろうとしていることです:

Image bgImage = loadImage(filename);
JPanel jp = new JPanel();

jp.setBounds(100,100,100,100);
jp.setOpaque(true);
jp.setBackgroudColor(Color.red);

bgImage.add(jp);

これを行った後、私はしか見えませんbgImage。私はすべてを試しましたが、それでもパネルを表示できません。誰かが私を助けることができますか?

4

2 に答える 2

4

内にコンポーネントを配置することはできませんImage。あなたがしたいImageのは、スイングコンポーネントの背景にペイントすることです(のようにJPanel)。すべてのswingコンポーネントには、paint()次の3つのメソッドを呼び出すメソッドがあります(おそらくこの順序ではありません):paintComponent()、、。そのため、このメソッドをオーバーライドして、パネル上に背景画像をペイントする必要があります。これが実行されると、カスタムメソッドが呼び出され、次にメソッドが呼び出されます。これにより、すべての「子」コンポーネントが背景画像の上にペイントされます。paintChildren()paintBorder()paintComponent()paintChildren()

class BackgroundImagePanel extends JPanel {

    public void setBackgroundImage(Image backgroundImage) {
        this.backgroundImage = backgroundImage;
    }

    @Override
    protected void paintComponent(Graphics graphics) {
        super.paintComponent(graphics);
        graphics.drawImage(backgroundImage, 0, 0, this);
    }

    private Image backgroundImage;
}

BackgroundImagePanel panel = new BackgroundImagePanel();
panel.setBackgroundImage(image);
panel.add(new JTextField("Enter text here..."));
panel.add(new JButton("Press Me"));
于 2009-10-10T23:34:19.523 に答える
0

「BackgroundImagePanel」ソリューションは、画像を実際のサイズでペイントします。これが要件である場合は、カスタムコンポーネントを作成する代わりに、JLabelを使用できます。

BackgroundPanelエントリは、これを行う方法を示しています。また、これが要件の一部である場合は、画像を拡大縮小および並べて表示できる、よりカスタムな画像ペイントソリューションを備えた背景パネルも提供します。

于 2009-10-12T15:43:05.613 に答える