Maison >Java >javaDidacticiel >Pourquoi mes composants Swing sont-ils cachés derrière une image d'arrière-plan et comment puis-je y remédier ?
Composants non visibles avec l'image d'arrière-plan
Dans le code fourni, les composants ne sont pas visibles car l'image d'arrière-plan les superpose. Pour résoudre ce problème, un JPanel doit être ajouté pour contenir les composants et définir sa position devant l'image.
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"); } } } }
Dans le code mis à jour, un JPanel nommé ComponentPanel est créé et ajouté au panneau principal. Ce panneau contient les champs de saisie et le bouton de connexion. Il est défini pour être opaque pour permettre à l'image d'arrière-plan de transparaître. La position du composantPanel est définie devant l'image en utilisant c.gridy = 1, garantissant que les composants sont visibles sur l'image d'arrière-plan.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!