ホームページ > Java > &#&チュートリアル > Java で背景画像を使用すると、JComponent が非表示になるのはなぜですか?

Java で背景画像を使用すると、JComponent が非表示になるのはなぜですか?

DDD
リリース: 2024-12-21 01:21:10
オリジナル
186 人が閲覧しました

Why Are My JComponents Invisible When Using a Background Image in Java?

JComponent が画像の背景で表示されない

JComponent が背景画像に対して表示されないという問題に直面しています。これは、画像のレンダリングに JPanel と JLabel が正しく使用されていないことが原因である可能性があります。

画像のレンダリングに JPanel を使用する

コード内で、画像を次のように追加しています。 JPanel:

mainp.add(picLabel, c);
ログイン後にコピー

これは正しいように見えますが、描画できるのは画像そのものではなく、画像自体のみです。コンポーネント。背景画像も維持しながらコンポーネントを表示するには、次のようにカスタム JPanel に直接描画する必要があります:

public class CustomJPanel extends JPanel {

    private BufferedImage image;

    public CustomJPanel(BufferedImage image) {
        this.image = image;
    }

    @Override
    public Dimension getPreferredSize() {
        return (new Dimension(image.getWidth(), image.getHeight()));
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, this);
    }
}
ログイン後にコピー

その後、このカスタム JPanel にコンポーネントを追加できます:

CustomJPanel customPanel = new CustomJPanel(ImageIO.read(new File("bgd.png")));
mainp.add(customPanel);
ログイン後にコピー

画像レンダリングに JLabel を使用する

あるいは、画像レンダリングに JLabel を使用できます。ただし、コンポーネントを正しく表示するには、その opaque プロパティを true に設定していることを確認してください:

JLabel picLabel = new JLabel(new ImageIcon(ImageIO.read(new File("bgd.png"))));
picLabel.setOpaque(true);
mainp.add(picLabel);
ログイン後にコピー

コンポーネントをメイン JPanel に追加していることを確認してください:

c.gridx = 0;
c.gridy = 1;
gusername = new JTextField();
picLabel.add(gusername, c);
ログイン後にコピー

次の手順に従います。を使用すると、カスタム JPanel を使用する場合でも、JLabel を正しく構成する場合でも、JComponent が背景画像に対して表示されるようにすることができます。

以上がJava で背景画像を使用すると、JComponent が非表示になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート