es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe una forma más rápida de crear 12 botones?

Estoy realizando una tarea donde necesito crear un GridLayout de 3×4 con 12 botones. La tarea es que cuando haga clic en cualquiera de los botones, los demás botones cambien su valor a 1. Ahora, así es como lo hice:

JFrame frame = new JFrame();
frame.setSize(300,200);
frame.setLayout(new GridLayout(3,4));

JButton b1 = new JButton("1");
JButton b2 = new JButton("2");
JButton b3 = new JButton("3");
JButton b4 = new JButton("4");
JButton b5 = new JButton("5");
JButton b6 = new JButton("6");
JButton b7 = new JButton("7");
JButton b8 = new JButton("8");
JButton b9 = new JButton("9");
JButton b10 = new JButton("10");
JButton b11 = new JButton("11");
JButton b12 = new JButton("12");

b1.addActionListener(lambdaExpression -> {
    b2.setText("1");
    b3.setText("1");
    b4.setText("1");
    b5.setText("1");
    b6.setText("1");
    b7.setText("1");
    b8.setText("1");
    b9.setText("1");
    b10.setText("1");
    b11.setText("1");
    b12.setText("1");

});

b2.addActionListener(lambdaExpression -> {
    b1.setText("1");
    b3.setText("1");
    b4.setText("1");
    b5.setText("1");
    b6.setText("1");
    b7.setText("1");
    b8.setText("1");
    b9.setText("1");
    b10.setText("1");
    b11.setText("1");
    b12.setText("1");

});

b3.addActionListener(lambdaExpression -> {
    b1.setText("1");
    b2.setText("1");
    b4.setText("1");
    b5.setText("1");
    b6.setText("1");
    b7.setText("1");
    b8.setText("1");
    b9.setText("1");
    b10.setText("1");
    b11.setText("1");
    b12.setText("1");

});
.
.
.
frame.add(b1);
frame.add(b2);
frame.add(b3);
.
.
.
frame.pack();
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setVisible(true);

Mi pregunta es: ¿hay alguna forma más rápida de hacer esto que simplemente copiar las mismas líneas 12 veces? Soy bastante nuevo en la programación en Java, así que cualquier consejo sería útil, ¡gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma más rápida de hacer esto que repetir el mismo código 12 veces. Una forma de hacerlo es creando un método que recibe un botón y establece el texto de todos los demás botones a “1”. Luego puedes pasar cada botón a este método utilizando un bucle, en lugar de escribir código separado para cada botón. Aquí tienes un ejemplo:

    public void setAllToOneExcept(JButton botonClicado, JButton[] botones) {
        for (JButton boton : botones) {
            if (boton != botonClicado) {
                boton.setText("1");
            }
        }
    }
    

    Aquí, el método recibe el botón clicado y un array con todos los botones. Itera a través del array y establece el texto de todos los botones excepto el botón clicado a “1”. Para utilizar este método, puedes reemplazar las expresiones lambda en tu código con una llamada a este método, pasando el botón clicado y el array de todos los botones. Aquí tienes un ejemplo:

    b1.addActionListener(e -> setAllToOneExcept(b1, new JButton[]{b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12}));
    

    Este código establece el listener de acción para el botón 1 para llamar al método setAllToOneExcept, pasando el botón 1 como el botón clicado y un array con los demás botones. Puedes hacer lo mismo para cada botón, pasando el botón correspondiente y el mismo array de todos los botones.

Comments are closed.