JComponentes que no aparecen con el fondo de la imagen?

Mis componentes no aparecen. ¿Cómo puedo solucionar esto?

Código:

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 )); mainp.add(picLabel, c); c.gridx = 0; c.gridy = 1; gusername = new JTextField(); gusername.setText("Username"); mainp.add(gusername, c); c.gridx = 0; c.gridy = 2; gpassword = new JTextField(); gpassword.setText(" password "); mainp.add(gpassword, c); c.gridx = 0; c.gridy = 3; JButton login = new JButton("Login"); mainp.add(login, c); 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"); } } } } 

Resultado:

Aquí primero mire este pequeño ejemplo, hágamelo saber si entendió lo que está sucediendo aquí. Entonces solo iremos un paso más, lentamente despacio. Intenta seguir este ejemplo, en el que te JPanel cómo dibujar en un JPanel

 import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.URL; import javax.imageio.ImageIO; import javax.swing.*; public class PaintingExample { private CustomPanel contentPane; private void displayGUI() { JFrame frame = new JFrame("Painting Example"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); contentPane = new CustomPanel(); frame.setContentPane(contentPane); frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); } public static void main(String... args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new PaintingExample().displayGUI(); } }); } } class CustomPanel extends JPanel { private BufferedImage image; public CustomPanel() { setOpaque(true); setBorder(BorderFactory.createLineBorder(Color.BLACK, 5)); try { /* * Since Images are Application Resources, * it's always best to access them in the * form of a URL, instead of File, as you are doing. * Uncomment this below line and watch this answer * of mine, as to HOW TO ADD IMAGES TO THE PROJECT * http://stackoverflow.com/a/9866659/1057230 * In order to access images with getClass().getResource(path) * here your Directory structure has to be like this * Project * | * ------------------------ * | | * bin src * | | * --------- .java files * | | * package image(folder) * ( or | * .class 404error.jpg * files, if * no package * exists.) */ //image = ImageIO.read( // getClass().getResource( // "/image/404error.jpg")); image = ImageIO.read(new URL( "http://i.imgur.com/8zgHpH8.jpg")); } catch(IOException ioe) { System.out.println("Unable to fetch image."); ioe.printStackTrace(); } } /* * Make this one customary habbit, * of overriding this method, when * you extends a JPanel/JComponent, * to define it's Preferred Size. * Now in this case we want it to be * as big as the Image itself. */ @Override public Dimension getPreferredSize() { return (new Dimension(image.getWidth(), image.getHeight())); } /* * This is where the actual Painting * Code for the JPanel/JComponent * goes. Here we will draw the image. * Here the first line super.paintComponent(...), * means we want the JPanel to be drawn the usual * Java way first (this usually depends on the opaque * property of the said JComponent, if it's true, then * it becomes the responsibility on the part of the * programmer to fill the content area with a fully * opaque color. If it is false, then the programmer * is free to leave it untouched. So in order to * overcome the hassle assoicated with this contract, * super.paintComponent(g) is used, since it adheres * to the rules, and performs the same task, depending * upon whether the opaque property is true or false), * then later on we will add our image to it, by * writing the other line, g.drawImage(...). */ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(image, 0, 0, this); } } 

Comstackr y ejecutar:

  1. Comando de comando / terminal / cmd. Y muévase a la ubicación a la que hace referencia la carpeta Proyecto
  2. Ahora comstack el código usando:

    C: \ Proyecto> javac -d bin src \ *. Java

  3. Ahora mueva a la carpeta bin , emitiendo un comando:

    C: \ Project> cd bin

  4. Una vez dentro de la carpeta bin , emita el siguiente comando para ejecutar:

    C: \ Proyecto \ bin> java PaintingExample

Aquí está el código cuando se utiliza JLabel como base para la imagen:

 import java.awt.*; import java.net.MalformedURLException; import java.net.URL; import javax.swing.*; public class LabelExample { private JPanel contentPane; private JLabel imageLabel; private void displayGUI() { JFrame frame = new JFrame("Label Example"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); contentPane = new JPanel(); contentPane.setOpaque(true); contentPane.setBorder( BorderFactory.createLineBorder(Color.BLACK, 5)); //imageLabel = new JLabel( // new ImageIcon( // getClass().getResource( // "/image/404error.jpg"))); try { imageLabel = new JLabel(new ImageIcon( new URL("http://i.imgur.com/8zgHpH8.jpg"))); } catch(MalformedURLException mue) { System.out.println( "Unable to get Image from" + "the Resource specified."); mue.printStackTrace(); } contentPane.add(imageLabel); frame.setContentPane(contentPane); frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); } public static void main(String... args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new LabelExample().displayGUI(); } }); } } 

Aquí está el resultado de ambos códigos anteriores:

error 404

 window.setVisible(true); should be invoked only after all the components have been added to the frame. void logini() throws IOException { JFrame window = new JFrame("Login"); 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 )); mainp.add(picLabel, c); c.gridx = 0; c.gridy = 1; gusername = new JTextField(); gusername.setText("Username"); mainp.add(gusername, c); c.gridx = 0; c.gridy = 2; gpassword = new JTextField(); gpassword.setText(" password "); mainp.add(gpassword, c); c.gridx = 0; c.gridy = 3; JButton login = new JButton("Login"); mainp.add(login, c); login.addActionListener(this); login.setActionCommand("ok"); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.setSize(500, 250); window.setResizable(false); window.setVisible(true); }