Para hacerlo estoy usando la layout GridBagLayout ayudandome con insets para hacerlo mas preciso.
Tengo creado 4 archivos, 1 de ellos creado para ver si funciona otro. (en la imagen es la ventana pequeña con el logo bien)
El problema que tengo es que en la ventana del programa no sale el logo. Pongo par que se pueda dimensionar la ventana y me doy cuenta que si la dimensiono de una manera se ve el logo en una parte, y moviendolo es como si se pusiese algo invisible delante tapandolo.
Aqui la imagen:
Las clases:
Main.java
Código:
Laucher.javapublic class Main { public static void main (String [] args){ Laucher l = new Laucher(); FrameLogo fl = new FrameLogo(); System.out.println("Unclain Laucher 2012"); System.out.println("http://unclain.blogspot.com/"); } }
Código:
JPanel con el logo:import java.awt.Color; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextPane; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JPanel; public class Laucher extends JFrame{ public JButton btentrar; public JLabel lblbienvenido; public JTextPane area; public JLabel lbllogo; private Logo logo; public Laucher(){ super("Unclain Laucher"); this.setVisible(true); this.setSize(565, 440); this.setResizable(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null); GridBagLayout gridBagLayout = new GridBagLayout(); gridBagLayout.rowWeights = new double[]{0.0, 1.0, 0.0, 0.0, 0.0}; gridBagLayout.columnWeights = new double[]{1.0, 0.0, 0.0, 0.0, 0.0}; getContentPane().setLayout(gridBagLayout); this.validate(); btentrar = new JButton("Entrar"); GridBagConstraints gbc1 = new GridBagConstraints(); gbc1.insets = new Insets(370, 490, 0, 20); gbc1.gridx = 1; gbc1.gridy = 2; gbc1.gridwidth = 0; gbc1.gridheight = 0; gbc1.fill = GridBagConstraints.BOTH; getContentPane().add(btentrar, gbc1); btentrar.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { } }); btentrar.setBackground(new Color(65, 163, 255)); lblbienvenido = new JLabel("¡Bienvenido a Unclain Laucher!"); lblbienvenido.setForeground(new Color(0, 78, 255)); GridBagConstraints gbc2 = new GridBagConstraints(); gbc2.insets = new Insets(370, 20, 0, 0); gbc2.gridx = 2; gbc2.gridy = 3; gbc2.gridwidth = 0; gbc2.gridheight = 0; gbc2.fill = GridBagConstraints.BOTH; getContentPane().add(lblbienvenido, gbc2); area = new JTextPane(); GridBagConstraints gbc3 = new GridBagConstraints(); gbc3.insets = new Insets(-10, 140, 80, 0); gbc3.gridx = 4; gbc3.gridy = 4; gbc3.gridwidth = 0; gbc3.gridheight = 0; gbc3.fill = GridBagConstraints.BOTH; add(area, gbc3); logo = new Logo(); GridBagConstraints gbc_panel = new GridBagConstraints(); gbc_panel.insets = new Insets(200, 0, 0, 0); gbc_panel.fill = GridBagConstraints.BOTH; gbc_panel.gridx = 4; gbc_panel.gridy = 1; this.add(logo, gbc_panel); //Insents: top left bottom right solucionElementos(); } public void solucionElementos(){ for(int i = 0; i < 2; i++){ btentrar.setVisible(true); btentrar.setVisible(false); btentrar.setVisible(true); } } }
Código:
FrameLogo (la clase que hice para probar el logo)import java.awt.Graphics; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import javax.swing.JPanel; public class Logo extends JPanel{ public BufferedImage logo; public Logo(){ this.setSize(100, 100); cargarImagenes(); } public void paintComponent(Graphics g){ super.paintComponent(g); g.drawImage(logo, 0, 0, null); } public void cargarImagenes(){ try{ logo = ImageIO.read(getClass().getClassLoader().getResource("Logo100x100.png")); }catch(Exception e){ System.out.println("No se encontro el logo."); } } }
Código:
Hay algun modo de que el JPanel con el logo este por encima de todos los elementos del programa? De esta manera no lo cubriria nada.import javax.swing.JFrame; public class FrameLogo extends JFrame{ public FrameLogo(){ super("Prueba"); this.setVisible(true); this.setResizable(true); this.setSize(150, 150); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.add(new Logo()); this.validate(); } }
Y si no, hay otra manera de poner una imagen en el JFrame sin usar otro JPanel?
Gracias. ;)