He creado una GUI usando Swing of Java. Ahora tengo que establecer una imagen sample.jpeg como fondo del fotograma en el que puse mis componentes. ¿Cómo hacer eso?¿Cómo establecer una imagen como fondo para Frame en Swing GUI of java?
Respuesta
No existe el concepto de una "imagen de fondo" en un JPanel
, por lo que uno tendría que escribir su propio camino para implementar dicha función.
Una forma de lograr esto sería reemplazar el método paintComponent
para dibujar una imagen de fondo cada vez que el JPanel
se actualiza.
Por ejemplo, uno podría subclase un JPanel
, y añadir un campo para mantener la imagen de fondo, y anular el paintComponent
método:
public class JPanelWithBackground extends JPanel {
private Image backgroundImage;
// Some code to initialize the background image.
// Here, we use the constructor to load the image. This
// can vary depending on the use case of the panel.
public JPanelWithBackground(String fileName) throws IOException {
backgroundImage = ImageIO.read(new File(fileName));
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Draw the background image.
g.drawImage(backgroundImage, 0, 0, this);
}
}
(. Por encima de código no ha sido probado)
El siguiente código se podría utilizar para añadir el JPanelWithBackground
en un JFrame
:
JFrame f = new JFrame();
f.getContentPane().add(new JPanelWithBackground("sample.jpeg"));
En este ejemplo, el 012 El métodose usó para leer en el archivo JPEG externo.
Usted puede hacer una subclase del componente
http://www.jguru.com/faq/view.jsp?EID=9691
o un violín con envolturas
http://www.java-tips.org/java-se-tips/javax.swing/wrap-a-swing-jcomponent-in-a-background-image.html
La entrada Background Panel muestra un par de diferentes maneras, dependiendo de sus necesidades.
Aquí hay otro enfoque rápido sin usar panel adicional.
JFrame f = new JFrame("stackoverflow") {
private Image backgroundImage = ImageIO.read(new File("background.jpg"));
public void paint(Graphics g) {
super.paint(g);
g.drawImage(backgroundImage, 0, 0, null);
}
};
No he encontrado que esta técnica funcione correctamente. La imagen a veces dibuja sobre los componentes secundarios, o a veces queda cubierta por el fondo normal del marco cuando no debería. – Boann
Sí, esto no funciona con componentes secundarios. –
Esto se hace fácilmente mediante la sustitución de panel de contenido del marco con un JPanel que dibuja su imagen:
try {
final Image backgroundImage = javax.imageio.ImageIO.read(new File(...));
setContentPane(new JPanel(new BorderLayout()) {
@Override public void paintComponent(Graphics g) {
g.drawImage(backgroundImage, 0, 0, null);
}
});
} catch (IOException e) {
throw new RuntimeException(e);
}
Este ejemplo también establece el diseño del panel a BorderLayout para que coincida con el diseño de panel de contenido predeterminado.
(Si tiene alguna dificultad para ver la imagen, es posible que tenga que llamar setOpaque(false)
en algunos otros componentes de manera que se puede ver hasta el fondo.)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class BackgroundImageJFrame extends JFrame
{
JButton b1;
JLabel l1;
public BackgroundImageJFrame()
{
setTitle("Background Color for JFrame");
setSize(400,400);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
/*
One way
-----------------*/
setLayout(new BorderLayout());
JLabel background=new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful design.png"));
add(background);
background.setLayout(new FlowLayout());
l1=new JLabel("Here is a button");
b1=new JButton("I am a button");
background.add(l1);
background.add(b1);
// Another way
setLayout(new BorderLayout());
setContentPane(new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads \\colorful design.png")));
setLayout(new FlowLayout());
l1=new JLabel("Here is a button");
b1=new JButton("I am a button");
add(l1);
add(b1);
// Just for refresh :) Not optional!
setSize(399,399);
setSize(400,400);
}
public static void main(String args[])
{
new BackgroundImageJFrame();
}
}
si está utilizando NetBeans puede agregar una jlabel al marco y a través de las propiedades cambia su ícono a su imagen y elimina el texto. luego mueva el jlabel a la parte inferior del Jframe o cualquier panel de contenido a través del navegador
- 1. Mostrar una imagen en Java Swing
- 2. Establecer una imagen de fondo para UIButton
- 3. ¿Cómo establecer una imagen .PNG como una imagen de fondo INCLINADA para mi formulario WPF?
- 4. Java GUI Swing Model Explicación
- 5. Mejor generador de GUI para Java/Swing
- 6. Componentes JAVA Swing GUI ¿cómo ver RTL?
- 7. GUI Arquitectura y diseño en Java (Swing)
- 8. Java Swing: cómo cambiar la GUI dinámicamente
- 9. Java AWT/SWT/Swing: ¿cómo planificar una GUI?
- 10. ¿Cómo establecer la imagen como fondo de pantalla mediante programación?
- 11. Swing/AWT - Crear GUI programáticamente
- 12. Automatización de GUI basada en Java (No se limita a GUI como Swing)
- 13. ¿Cómo utilizar una imagen SVG como fondo?
- 14. Establecer imagen de fondo para QPushButton
- 15. Establecer color/imagen de fondo para EKEventEditViewController
- 16. Establecer imagen de fondo en uitableview?
- 17. Cómo establecer una imagen de fondo en android
- 18. Establecer una imagen como fondo para TableView con Storyboard en iOS
- 19. hex visualizador/editor componente GUI para Java Swing?
- 20. Cómo hacer una columnas en JTable Invisible para Swing Java
- 21. Establecer imagen de fondo para toda la aplicación en Android
- 22. ¿Cómo rotar una imagen gradualmente en Swing?
- 23. Establecer imagen de fondo en UIViewController (MonoTouch)
- 24. ¿Cómo mejorar la apariencia de JAVA swing GUI?
- 25. Cómo establecer la imagen de fondo para Editar (Delphi)
- 26. Cómo establecer la imagen de fondo de una vista?
- 27. Establecer un objeto Imagen como una imagen de fondo div utilizando javascript
- 28. ¿Cómo alterar el valor WM_CLASS en una aplicación Java GUI basada en Swing o NetBeans Platform?
- 29. ¿Cómo establecer una imagen de fondo del elemento SVG rect?
- 30. ¿Podemos establecer una imagen de fondo en las pestañas?
Esto no responde del todo la pregunta. Pone una imagen de fondo en un panel, pero luego solo inserta el panel en el diseño normal. La pregunta era cómo establecer un fondo en un marco detrás de otros componentes. – Boann
¿Causaría problemas si le diera 'null' como su ImageObserver? – georgiaboy82