import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.awt.Color; import java.net.URL; // CLASE PRINCIPAL public class Botones_fotos extends JFrame implements ActionListener { // 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 imagenes 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"); // Cadena para usar en setLabelPicture(), coincide con el nombre de la imagen JPG y con el texto del boton private String nombreFoto; // METODO DE ENTRADA AL PROGRAMA public static void main(String[] args) { // decoracion Java //JFrame.setDefaultLookAndFeelDecorated(true); // instancia de la clase principal, hereda JFrame new Botones_fotos(); } // METODO CONSTRUCTOR QUE CREA Y MUESTRA LA INTERFAZ public Botones_fotos() { // la variable especial this se usa en metodos de instancia para hacer referencia al objeto // que contiene al metodo. Aqui equivale a la ventana (JFrame) // lo que pasa al cerrar la ventana: salir del programa this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // colocar elementos en los paneles, panel1 es contentPane del JFrame panel1.setOpaque(true); this.setContentPane(panel1); // rellenar los paneles 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 los botones inferiores, configurar la fuente y enlazarlos con addActionListener Codigo.setActionCommand ("Codigo"); //Codigo.setBackground(new Color(220,220,220)); Codigo.addActionListener(this); Salir.setActionCommand ("Salir"); //Salir.setBackground(new Color(220,220,220)); 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].setBackground(new Color(220,220,220)); strBotones[i].addActionListener(this); } // configurar la etiqueta imgLabel imgLabel.setHorizontalAlignment(JLabel.CENTER); imgLabel.setOpaque(true); //imgLabel.setBackground(new Color(220,220,220)); // configurar la etiqueta rutaLabel rutaLabel.setHorizontalAlignment(JLabel.CENTER); rutaLabel.setFont(new java.awt.Font("Arial", Font.PLAIN, 12)); //rutaLabel.setBackground(new Color(220,220,220)); //rutaLabel.setSize(560,124); //rutaLabel.setBorder(BorderFactory.createLineBorder(Color.black, 1)); // mostrar la ventana this.setTitle("Botones y Fotos"); this.setSize(new Dimension(720,582)); // ajustar el marco a sus contenedores //this.pack(); // centrar el formulario en la pantalla this.setLocationRelativeTo(null); this.setResizable(false); this.setVisible(true); // llamar al metodo setLabelPicture() si se prefiere que el programa arranque ya con imagen cargada // comentar las 2 lineas si se prefiere que arranque vacio sin imagen cargada nombreFoto = "Pelosas"; // imagen que aparece al arrancar el programa setLabelPicture(); } // MOSTRAR LA IMAGEN EN LA ETIQUETA private void setLabelPicture() { imgLabel.setText(""); // texto del boton con extension 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 ); String urlS = url.toString(); // Java coloca los caracteres %20 en lugar de los espacios en blanco de la ruta, se quitan para mejorar su aspecto urlS = urlS.replace("%20"," "); // informar de la ruta a la imagen seleccionada, para ver la presentacion de URL rutaLabel.setText("" + urlS); // informar tambien con cuadro de mensaje //JOptionPane.showMessageDialog(null, "Ruta a la imagen seleccionada: " + urlS, "URL de la imagen", JOptionPane.PLAIN_MESSAGE); // JLabel.setIcon(Icon) 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 boton con el texto Archivo fuente Java, es decir, // si ActionCommand es Codigo, mostrar la ventana con codigo Java if ("Codigo".equals(e.getActionCommand())) { // mostrar un objeto Botones_fotos_code, es el marco para la segunda ventana Botones_fotos_code codeForm = new Botones_fotos_code(); //codeForm.show(); } --> obsoleto codeForm.setVisible(true); } // si se ha pulsado en el boton Salir (si ActionCommand es Salir) else if ("Salir".equals(e.getActionCommand())) { System.exit(0); } // si se ha pulsado en cualquier otro boton else { /// e.getActionCommand() equivale al texto del boton para pasarle al metodo e.getActionCommand() // el nombre de la imagen que es el texto del boton on extension jpg nombreFoto = e.getActionCommand(); setLabelPicture(); } } }