2011-11-18 28 views
6

Esta será una pregunta realmente teórica, solo aguanta un poco conmigo. Necesito hacer algo con mis JButtons, y no tengo idea de por dónde empezar.Cómo seleccionar realmente un JButton

Así que lo que necesito es poder hacer clic en un JButton, y tener una prueba visual de que está seleccionado, por ejemplo, un borde rojo o fondo blanco o algo así. Y quiero que permanezca así hasta que se seleccione otro JButton de la misma manera. En este momento, cuando hago clic en un Jbutton, aparece una breve visualización en la que se hace clic, pero no puedo esperar más.

He intentado jugar un poco con ChangeListeners, pero no hay resultados.

Así que mi pregunta es básicamente: ¿qué tipo de enfoque me aconsejarías que probara?

1 - volver a ChangeListener, que es la única opción 2 - JButton tiene otra opción que hace exactamente eso

Lo siento si es demasiado vaga, pero todo lo demás me encontré fue muy específica, y no respondió Mis preguntas.

Respuesta

10

Me pregunto si desea usar un JToggleButton, tal vez uno agregado a un ButtonGroup para que solo se seleccione un botón a la vez.

edición
por ejemplo:

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 

public class ToggleArray extends JPanel { 
    private static final int SIDE = 5; 

    public ToggleArray() { 
     ActionListener listener = new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      System.out.println("Button selected: " + e.getActionCommand()); 
     } 
     }; 

     setLayout(new GridLayout(SIDE, SIDE)); 
     ButtonGroup btnGroup = new ButtonGroup(); 
     for (int i = 0; i < SIDE * SIDE; i++) { 
     String text = String.format("[%d, %d]", i % SIDE, i/SIDE); 
     JToggleButton btn = new JToggleButton(text); 
     btn.addActionListener(listener); 
     btnGroup.add(btn); 
     add(btn); 
     } 
    } 

    private static void createAndShowGui() { 
     ToggleArray mainPanel = new ToggleArray(); 

     JFrame frame = new JFrame("ToggleArray"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

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

la que se vería así:
enter image description here

+0

+1, buena sugerencia . – mre

+0

+1 no sobre JToggleButton sino sobre ButtonGroup http://tips4java.wordpress.com/2008/11/09/select-button-group/ – mKorbel

+0

oooh, sí, podría ser exactamente lo que necesito, gracias :) –

0

Usted podría intentar cambiar el color de fondo:

boolean jButton1clicked = false; 

jButton1.addActionListener(new ActionListener(){ 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     jButton1selected = !jButton1selected; 
    } 
); 

jButton1.setBackgroundColor(jButton1clicked ? Color.green : Color.red); 
+1

Esto no tiene ningún efecto visible en algunas implementaciones Look & Feel. – trashgod

Cuestiones relacionadas