Heim >Java >javaLernprogramm >Warum sind meine Swing-Komponenten hinter einem Hintergrundbild verborgen und wie kann ich das beheben?
Komponenten mit Hintergrundbild nicht sichtbar
Im bereitgestellten Code sind die Komponenten nicht sichtbar, da das Hintergrundbild sie überlagert. Um dies zu beheben, sollte ein JPanel hinzugefügt werden, das die Komponenten enthält und seine Position vor dem Bild festlegt.
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"); } } } }
Im aktualisierten Code wird ein JPanel mit dem Namen „componentPanel“ erstellt und dem Hauptpanel hinzugefügt. Dieses Panel enthält die Eingabefelder und die Anmeldeschaltfläche. Es ist undurchsichtig eingestellt, damit das Hintergrundbild durchscheinen kann. Die Position des ComponentPanel wird mit c.gridy = 1 vor dem Bild festgelegt, um sicherzustellen, dass die Komponenten über dem Hintergrundbild sichtbar sind.
Das obige ist der detaillierte Inhalt vonWarum sind meine Swing-Komponenten hinter einem Hintergrundbild verborgen und wie kann ich das beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!