import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.Color;
import java.net.URL;
// CLASE PRINCIPAL
public class Botones_Fotos2 extends JFrame implements ActionListener {
// VARIABLES A NIVEL DE CLASE
/* Container es un componente genérico AWT que puede contener otros componentes AWT
*
* Swing proporciona 3 contenedores de primer nivel: JFrame, JDialog y JApplet,
* cada uno de ellos contiene un panel raíz (JRootPane) con varios elementos:
* - panel de contenido (contentPane): los componentes visibles del contenedor de primer nivelexcepto barra de menú, por defecto tiene BorderLayout()
* - barra de menú (menuBar): es opcional, está fuera de contentPane
* - panel de cristal (glassPane): por encima de menuBar y contentPane, está oculto por defecto y se encarga de interceptar acciones del usuario para JRootPane:
*
* No se puede añadir elementos directamente a JRootPane:
* rootPane.add(elemento); --> NO
* hay que añadirlos al contentPane de rootPane con el método getContentPane():
* rootPane.getContentPane().add(elemento); --> SI
*
* Para añadir elementos a un Frame: Frame.getContentPane().add(elemento);
*
* getContentPane() devuelve un objeto Container, no un objeto JComponent
* por ello es conveniente crear un componente personalizado para usar como contentPane;
*
* Para usar un componente como contentPane:
*
* crear un panel y añadirle componentes:
* JPanel panel = new JPanel(new BorderLayout());
* panel.setBorder(elegirBorde);
* panel.add(unComponente, BorderLayout.CENTER);
* panel.add(otroComponente, BorderLayout.PAGE_END);
*
* hacer que panel sea contentPane de un contenedor de nivel superior:
* panel.setOpaque(true);
* topLevelContainer.setContentPane(panel);
*
* panel1 es el contenedor de todos los elementos de la ventana */
//private Container panel1 = getContentPane();
private JPanel panel1 = new JPanel(new BorderLayout());
// panel para la etiqueta rutaLabel y pBotones
private JPanel panelSup = new JPanel(new GridLayout(2,0));
// panel que agrupa los botones superiores
private JPanel pBotones = new JPanel(new GridLayout(1,0));
// panel para la etiqueta rutaLabel
private JPanel pLabel = new JPanel();
// panel para los botones inferiores
private JPanel pBotones2 = new JPanel(new GridLayout(1,0));
// Array de botones con el nombre de la imagen en cada uno de ellos
private JButton[] strBotones = {new JButton("Pelosas"),
new JButton("Tux"),
new JButton("Ctr"),
new JButton("Gato"),
new JButton("Milu")};
// fuente para botones y etiqueta
Font letra = new Font("Verdana", Font.BOLD, 12);
// etiqueta para mostrar las imágenes JPG
private JLabel imgLabel = new JLabel();
// etiqueta para mostrar la ruta a los archivos
private JLabel rutaLabel = new JLabel();
// botones de la parte inferior
private JButton Codigo = new JButton("Archivo fuente java");
private JButton Salir = new JButton("Salir del programa");
// String para mostrar en el cuadro de diálogo
//String txtLabel = new String();
/* String foto para usar en setLabelPicture()
* coincide con el nombre de la imagen JPG y con el texto del botón
* esta imagen aparece al arrancar el programa */
private String nombreFoto = "Milu";
// MÉTODO DE ENTRADA AL PROGRAMA
public static void main(String[] args) {
// decoración Java
//JFrame.setDefaultLookAndFeelDecorated(true);
// instancia de la clase principal, hereda JFrame
new Botones_Fotos2();
}
// MÉTODO CONSTRUCTOR QUE CREA Y MUESTRA LA INTERFAZ
public Botones_Fotos2() {
/* la variable especial this se usa en métodos de instancia
* para hacer referencia al objeto que contiene al método,
* aquí equivale a JFrame */
// lo que pasa al cerrar la ventana: salir del programa
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// mostrar los botones inferiores, configurar la fuente y enlazarlos con addActionListener
Codigo.setActionCommand ("Codigo");
Codigo.addActionListener(this);
Salir.setActionCommand ("Salir");
Salir.addActionListener(this);
// mostrar los botones superiores, configurar la fuente y enlazarlos con addActionListener
for(int i = 0; i < strBotones.length; i++) {
pBotones.add(strBotones[i]);
strBotones[i].setFont(letra);
strBotones[i].addActionListener(this);
}
// configurar la etiqueta imgLabel
imgLabel.setHorizontalAlignment(JLabel.CENTER);
imgLabel.setOpaque(true);
imgLabel.setBackground(Color.gray);
// configurar la etiqueta rutaLabel
rutaLabel.setHorizontalAlignment(JLabel.CENTER);
rutaLabel.setFont(new java.awt.Font("Arial", Font.PLAIN, 10));
// etiqueta para mostrar el código que añade los botones
/*txtLabel = "for(int i = 0; i < strBotones.length; i++)\n"+
"{\n"+
"pBotones.add(strBotones[i]);\n"+
"strBotones[i].setFont(letra);\n"+
"strBotones[i].addActionListener(this);\n"+
"}"; */
/* colocar elementos en los paneles
* panel1 es contentPane del JFrame */
panel1.setOpaque(true);
this.setContentPane(panel1);
//pLabel.setBorder(BorderFactory.createLineBorder(Color.red, 1));
panel1.add(panelSup, BorderLayout.NORTH);
panelSup.add(pBotones);
panelSup.add(pLabel);
panel1.add(imgLabel, BorderLayout.CENTER);
panel1.add(pBotones2, BorderLayout.SOUTH);
pBotones2.add(Codigo);
pBotones2.add(Salir);
pLabel.add(rutaLabel);
// mostrar la ventana
this.setTitle("Botones y Fotos");
this.setSize(new Dimension(600,540));
// ajustar el marco a sus contenedores
//this.pack();
// centrar el formulario en la pantalla
this.setLocationRelativeTo(null);
this.setResizable(false);
this.setVisible(true);
/* llamar aquí al método setLabelPicture() si se prefiere
* que el programa arranque ya con una imagen en la etiqueta */
//setLabelPicture();
}
// MOSTRAR LA IMAGEN EN LA ETIQUETA
private void setLabelPicture() {
imgLabel.setText("");
// texto del botón con extensión jpg = nombre del archivo JPG
String nombreCompleto = "img/" + nombreFoto + ".jpg";
/* buscar el archivo JPG dentro del archivo JAR,
* para poder usar la clase URL hay que importar el paquete java.net.URL */
URL url = this.getClass().getResource( nombreCompleto );
/* informar de la ruta a la imagen seleccionada, para observar
* las distintas formas de presentación de URL */
rutaLabel.setText("" + url);
//JOptionPane.showMessageDialog(null, "Ruta a la imagen seleccionada: " + url, "URL de la imagen", JOptionPane.PLAIN_MESSAGE);
// JLabel.setIcon(Icono icono) define el icono mostrado en la etiqueta, centrado en horizontal y en vertical
imgLabel.setIcon(new ImageIcon(url));
}
// LO QUE SUCEDE AL PULSAR UNO DE LOS BOTONES
public void actionPerformed(ActionEvent e) {
/* si se ha pulsado en el botón Dialogo (si ActionCommand es Codigo)
* mostrar la ventana con código Java */
if ("Codigo".equals(e.getActionCommand())) {
// mostrar un objeto Botones_Fotos2_code, es el marco para la 2ª ventana
Botones_Fotos2_code codeForm = new Botones_Fotos2_code();
codeForm.show(); }
//JOptionPane.showMessageDialog(null, txtLabel, "Crear botones", JOptionPane.PLAIN_MESSAGE); }
// si se ha pulsado en el botón Salir (si ActionCommand es Salir)
else if ("Salir".equals(e.getActionCommand())) {
System.exit(0); }
// si se ha pulsado en cualquier otro botón
else {
/* e.getActionCommand() equivale al texto del botón
* para pasarle al método e.getActionCommand() el nombre de la imagen
* que es texto del botón.jpg */
nombreFoto = e.getActionCommand();
setLabelPicture(); }
}
}