ホームページ >Java >&#&チュートリアル >Swing コンポーネントが背景画像の後ろに隠れているのはなぜですか?それを修正するにはどうすればよいですか?

Swing コンポーネントが背景画像の後ろに隠れているのはなぜですか?それを修正するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-18 17:07:10677ブラウズ

Why are my Swing components hidden behind a background image, and how can I fix it?

背景画像でコンポーネントが表示されない

提供されたコードでは、背景画像がコンポーネントをオーバーレイしているため、コンポーネントは表示されません。これを修正するには、JPanel を追加してコンポーネントを含め、その位置を画像の前に設定する必要があります。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;

public class Login implements ActionListener {
    JTextField gusername;
    JTextField gpassword;
    static String username;
    static String password;

    void logini() throws IOException {
        JFrame window = new JFrame("Login");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setSize(300, 250);
        window.setResizable(false);
        window.setVisible(true);

        JPanel mainp = new JPanel(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        window.add(mainp);

        BufferedImage myPicture = ImageIO.read(new File("c:\bgd.png"));
        JLabel picLabel = new JLabel(new ImageIcon(myPicture));
        picLabel.setPreferredSize(new Dimension(300, 250));
        mainp.add(picLabel, c);

        JPanel componentPanel = new JPanel();
        componentPanel.setOpaque(false);
        c.gridx = 0;
        c.gridy = 1;
        mainp.add(componentPanel, c);

        c.gridx = 0;
        c.gridy = 1;
        gusername = new JTextField();
        gusername.setText("Username");
        componentPanel.add(gusername);

        c.gridx = 0;
        c.gridy = 2;
        gpassword = new JTextField();
        gpassword.setText("password ");
        componentPanel.add(gpassword);

        c.gridx = 0;
        c.gridy = 3;
        JButton login = new JButton("Login");
        componentPanel.add(login);

        login.addActionListener(this);
        login.setActionCommand("ok");
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equalsIgnoreCase("ok")) {
            try {
                this.username = (gusername.getText());
                this.password = (gpassword.getText());
                System.out.println("0");
            } catch (NumberFormatException ex) {
                System.out.println("ERROR: Could not preform function: 7424");
            }
        }
    }
}

更新されたコードでは、componentPanel という名前の JPanel が作成され、メイン パネルに追加されます。このパネルには、入力フィールドとログイン ボタンが含まれています。背景画像が透けて見えるように不透明に設定されています。 ComponentPanel の位置は、c.gridy = 1 を使用して画像の前に設定され、コンポーネントが背景画像の上に確実に表示されるようにします。

以上がSwing コンポーネントが背景画像の後ろに隠れているのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。