una ponerle poner imagen formulario fondo contenedor como colocar java image swing background jpanel

java - ponerle - La forma más simple de establecer la imagen como fondo JPanel



como ponerle una imagen de fondo a un panel en java (4)

Estoy tratando de establecer el fondo de un JPanel usando una imagen, sin embargo, cada ejemplo que encuentro parece sugerir extender el panel con su propia clase

sí, deberá extender JPanel y anular la función paintcomponent(Graphics g) para hacerlo.

@Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(bgImage, 0, 0, null); }

He estado buscando una manera de simplemente agregar la imagen sin crear una clase completamente nueva y dentro del mismo método ( tratando de mantener las cosas organizadas y simples ).

Puede usar otro componente que le permita agregar una imagen como icono directamente, por ejemplo, JLabel si lo desea.

ImageIcon icon = new ImageIcon(imgURL); JLabel thumb = new JLabel(); thumb.setIcon(icon);

¡Pero nuevamente en el grupo tratando de mantener las cosas organizadas y simples ! ¿Qué te hace pensar que crear una nueva clase te llevará a un mundo desordenado?

¿Cómo agregaría la imagen de fondo a mi JPanel sin crear una nueva clase o método, sino simplemente insertándola junto con el resto de los atributos de JPanel?

Estoy tratando de establecer un fondo de JPanel usando una imagen, sin embargo, cada ejemplo que encuentro parece sugerir extender el panel con su propia clase.

He estado buscando una manera de simplemente agregar la imagen sin crear una clase completamente nueva y dentro del mismo método (tratando de mantener las cosas organizadas y simples).

Aquí hay un ejemplo del método que establece mi JPanel:

public static JPanel drawGamePanel(){ //Create game panel and attributes JPanel gamePanel = new JPanel(); Image background = Toolkit.getDefaultToolkit().createImage("Background.png"); gamePanel.drawImage(background, 0, 0, null); //Set Return return gamePanel; }


La forma más simple de establecer la imagen como fondo JPanel

No use un JPanel. Simplemente use un JLabel con un ícono, entonces no necesita un código personalizado.

Consulte el Panel de antecedentes para obtener más información, así como una solución que pintará la imagen en un JPanel con 3 opciones de pintura diferentes:

  1. escamoso
  2. alicatado
  3. real

Como sé que la forma en que puede hacerlo es anular el método paintComponent que exige heredar JPanel

@Override protected void paintComponent(Graphics g) { super.paintComponent(g); // paint the background image and scale it to fill the entire space g.drawImage(/*....*/); }

Por otro lado (un poco complicado) para crear un segundo JPanel personalizado y ponerlo como fondo para su principal

ImagePanel

public class ImagePanel extends JPanel { private static final long serialVersionUID = 1L; private Image image = null; private int iWidth2; private int iHeight2; public ImagePanel(Image image) { this.image = image; this.iWidth2 = image.getWidth(this)/2; this.iHeight2 = image.getHeight(this)/2; } public void paintComponent(Graphics g) { super.paintComponent(g); if (image != null) { int x = this.getParent().getWidth()/2 - iWidth2; int y = this.getParent().getHeight()/2 - iHeight2; g.drawImage(image,x,y,this); } } }

EmptyPanel

public class EmptyPanel extends JPanel{ private static final long serialVersionUID = 1L; public EmptyPanel() { super(); init(); } @Override public boolean isOptimizedDrawingEnabled() { return false; } public void init(){ LayoutManager overlay = new OverlayLayout(this); this.setLayout(overlay); ImagePanel iPanel = new ImagePanel(new IconToImage(IconFactory.BG_CENTER).getImage()); iPanel.setLayout(new BorderLayout()); this.add(iPanel); iPanel.setOpaque(false); } }

IconToImage

public class IconToImage { Icon icon; Image image; public IconToImage(Icon icon) { this.icon = icon; image = iconToImage(); } public Image iconToImage() { if (icon instanceof ImageIcon) { return ((ImageIcon)icon).getImage(); } else { int w = icon.getIconWidth(); int h = icon.getIconHeight(); GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice gd = ge.getDefaultScreenDevice(); GraphicsConfiguration gc = gd.getDefaultConfiguration(); BufferedImage image = gc.createCompatibleImage(w, h); Graphics2D g = image.createGraphics(); icon.paintIcon(null, g, 0, 0); g.dispose(); return image; } } /** * @return the image */ public Image getImage() { return image; } }


Dibuje la imagen en el fondo de un JPanel que se agrega al marco. Use un administrador de diseño para agregar normalmente sus botones y otros componentes al panel. Si agrega otros paneles secundarios, quizás desee establecer child.setOpaque (false).

import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.io.IOException; import java.net.URL; public class BackgroundImageApp { private JFrame frame; private BackgroundImageApp create() { frame = createFrame(); frame.getContentPane().add(createContent()); return this; } private JFrame createFrame() { JFrame frame = new JFrame(getClass().getName()); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); return frame; } private void show() { frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } private Component createContent() { final Image image = requestImage(); JPanel panel = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(image, 0, 0, null); } }; panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); for (String label : new String[]{"One", "Dois", "Drei", "Quatro", "Peace"}) { JButton button = new JButton(label); button.setAlignmentX(Component.CENTER_ALIGNMENT); panel.add(Box.createRigidArea(new Dimension(15, 15))); panel.add(button); } panel.setPreferredSize(new Dimension(500, 500)); return panel; } private Image requestImage() { Image image = null; try { image = ImageIO.read(new URL("http://www.johnlennon.com/wp-content/themes/jl/images/home-gallery/2.jpg")); } catch (IOException e) { e.printStackTrace(); } return image; } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new BackgroundImageApp().create().show(); } }); } }