Autor Tema: Java Poo crear ¿Como trabajar un metodo para 100 botones con distintos Nombres?  (Leído 2893 veces)

LuisEscuzaVargas

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Muy buenas tardes estoy trabajando en un proyecto de la universidad. Necesito ayuda con este código. Lo que está haciendo es seleccionar  una imagen e insertarla como un icono de un  botón, el problema es que necesito crear 100 métodos por el nombre de mis botones , mi pregunta es si puede generar un método que me sirva para todos los  botones.

Código: [Seleccionar]
public void MostrarImagenBoton1Principal {int numeroBoton) (
try {
String destino = "ImagenesDisco/";
File dir = new File (destino) ;
String[] ficheros = dir.list() ;
if (ficheros == null ) {
JOptionPane.shovMessageDialog{null, "No hay ficheros en el directorio") ;
} else {
JButton[] botones = new JButton[lOOJ;
for {int i = O; i < 105; i++) {
botones[i] = new JButton ("Boton_"+l) ;
}
btnDiscosl.removeAll();
int x = btnDiscosl.getWidth() ;
int y = btnDiscosl .getHeight() ;
Imagen imagen = new Imagen{x, y, destino + "" + ficheros[numeroBoton] ) ;
btnDiscosl.add(imagen);
btnDiscosl.repaint();
}
}
catch {Exception e ) {
JOptionPane.shovMessageDialog(null, "No hay Informaci6n en la imagen") ;
System.out. println(e .toString()) ;
}
}
« Última modificación: 21 de Agosto 2022, 20:02 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Hola.
Pero, si tienes 100 botones, lo normal es que los tengas declarados dentro un array.
Por tanto, basta con recorrer el array y establecer la imagen que toque.

La verdad es que no me queda muy claro el objetivo del programa.
Y el código que has puesto lo veo extraño, pues se declara un array de botones dentro del método (ese array "morirá" cuando el método acabe.
Además es un array de 100 botones pero se recorre con un bucle que va hasta 105, así que seguramente producirá una excepción por salirse del rango del array.

Y de todos modos, ese array no hace nada, porque luego se trabaja sobre un objeto llamado btnDiscos1.

Así que ese código tampoco me sirve para hacerme una idea concreta de lo que se necesita.

Pero pongo aquí un ejemplo muy básico, donde se inicializan 100 botones (están en un array) y se colocan en pantalla.
Al inicializarlo, se les adjudica una imagen. Les he puesto a todos la misma, pero se podría modificar para coger imágenes de una lista creada previamente.

Código: [Seleccionar]
public class CienBotones extends JFrame {

private JButton[] botones;

public CienBotones() {

iniciarBotones();

setLayout(new GridLayout(10, 10, 6, 6));
for (JButton btn: botones)
add(btn);

setTitle("Cien Botones");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}

private void iniciarBotones() {
botones = new JButton[100];
for (int i = 0; i < 100; i++)
botones[i] = new JButton(new ImageIcon(getClass().getClassLoader().getResource("cienBotonesImagen/imagen.png")));
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
new CienBotones();
}
});
}

}

Al ejecutarlo, se crean 100 botones con imagen, sin importar su nombre. Porque de hecho no tienen "nombre", están agrupados en un array, ya que es la única forma de trabajar cómodamente con tantos botones.



A ver si te sirve de inspiración para optimizar tu código.
Si lo crees necesario, comparte aquí tu código (puedes adjuntarlo como archivo .zip) y/o tal vez una imagen de como debería quedar el resultado.

Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

LuisEscuzaVargas

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Hola muchas gracias por la respuesta, lo que estoy haciendo es una tienda de discos, Registro los productos y los guardo en un  archivo y la imagen que selecciono la guardo en una carpeta dentro del proyecto con un nombre secuencial  1 , la  segunda imagen se llamaría 2 y así sucesivamente.

Y lo único que hago con el método es  crear un array y  por la posición hacer uso de la imagen

MostrarBoton1Principal(0);
MostrarBoton2Principal(1);

Código: [Seleccionar]
public void MostrarImagenBoton1Principal(int numeroBoton) {
        try {
            String destino = "ImagenesDisco/";
            File dir = new File(destino);
            String[] ficheros = dir.list();
            if (ficheros == null) {
                JOptionPane.showMessageDialog(null, "No hay ficheros en el directorio");
            } else {
               
                btnDiscos1.removeAll();
                int x = btnDiscos1.getWidth();
                int y = btnDiscos1.getHeight();
                Imagen imagen = new Imagen(x, y, destino + "" + ficheros[numeroBoton]);
                btnDiscos1.add(imagen);
                btnDiscos1.repaint();
     
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "No hay Información en la imagen");
            System.out.println(e.toString());
        }
    }
« Última modificación: 21 de Agosto 2022, 20:03 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Sigo sin saber donde/como tienes declarados esos botones.

Hablas de 100 botones.... Si los tienes así declarados, desde el 1 hasta el 100:

Código: [Seleccionar]
private JButton btnDiscos1;
private JButton btnDiscos2;
private JButton btnDiscos3;
private JButton btnDiscos4;
private JButton btnDiscos5;
.....
.....
private JButton btnDiscos100;

Pues ya te digo que mal asunto, es imposible gestionarlo de forma óptima.

En cambio, si los pones en un array como en el ejemplo que yo puse, ya lo tendrías solucionado.
El parámetro "int numeroBoton" que te indica qué archivo imagen hay que escoger del array de imágenes, también te estaría diciendo a cuál botón del array de botones hay que aplicarle esa imagen.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".