Rumah >Java >javaTutorial >Mengapa komponen Swing saya tersembunyi di sebalik imej latar belakang, dan bagaimana saya boleh membetulkannya?

Mengapa komponen Swing saya tersembunyi di sebalik imej latar belakang, dan bagaimana saya boleh membetulkannya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-18 17:07:10684semak imbas

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

Komponen Tidak Kelihatan dengan Imej Latar Belakang

Dalam kod yang disediakan, komponen tidak kelihatan kerana imej latar belakang menindikannya. Untuk membetulkannya, JPanel harus ditambah untuk mengandungi komponen dan menetapkan kedudukannya di hadapan imej.

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");
            }
        }
    }
}

Dalam kod yang dikemas kini, JPanel bernama componentPanel dibuat dan ditambahkan pada panel utama. Panel ini mengandungi medan input dan butang log masuk. Ia ditetapkan menjadi legap untuk membolehkan imej latar belakang dipaparkan. Kedudukan componentPanel ditetapkan di hadapan imej menggunakan c.gridy = 1, memastikan komponen kelihatan di atas imej latar belakang.

Atas ialah kandungan terperinci Mengapa komponen Swing saya tersembunyi di sebalik imej latar belakang, dan bagaimana saya boleh membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn