2011-11-18 3 views
6

To będzie naprawdę teoretyczne pytanie, po prostu weź ze mną trochę. Muszę coś zrobić z moimi JButtonami i nie mam pojęcia, od czego zacząć.Jak właściwie wybrać JButton

Potrzebuję więc, aby móc kliknąć przycisk J, i mieć wizualny dowód, że został wybrany, na przykład czerwoną obwódkę lub białe tło lub coś podobnego. I chcę, żeby tak pozostało, dopóki inny JButton nie zostanie wybrany w ten sam sposób. Teraz, kiedy klikam na przycisk "J", pojawia się krótki, wizualny wyświetlacz, który został kliknięty, ale nie mogę go dłużej trwać.

Próbowałem zagrać trochę z ChangeListeners, ale bez wyników.

Moje pytanie brzmi w zasadzie: jakiego rodzaju podejście radziłbyś mi spróbować?

1 - wrócić do ChangeListener, to jedyna opcja 2 - JButton ma inną opcję, że robi dokładnie to

Niestety jeśli jest zbyt niejasne, ale wszystko uważam, że było bardzo specyficzne i nie odpowiedział moje pytania.

Odpowiedz

10

Zastanawiam się, czy chcesz użyć JToggleButton, być może dodanego do ButtonGroup, aby wybrać tylko jeden przycisk naraz.

edit
na przykład:

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(); 
     } 
     }); 
    } 
} 

który wyglądałby następująco:
enter image description here

+0

+1, dobra propozycja . – mre

+0

+1 nie o JToggleButton, ale o ButtonGroup http://tips4java.wordpress.com/2008/11/09/select-button-group/ – mKorbel

+0

oooh, tak, może być dokładnie to, czego potrzebuję, dzięki :) –

0

Można spróbować zmienić kolor tła:

boolean jButton1clicked = false; 

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

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

Nie ma to widocznego wpływu na niektóre implementacje Look & Feel. – trashgod