Как на самом деле выбрать JButton - PullRequest
6 голосов
/ 18 ноября 2011

Это будет действительно теоретический вопрос, просто терпите меня немного. Мне нужно что-то сделать с моими кнопками J, и я не знаю, с чего начать.

Итак, мне нужно иметь возможность щелкнуть JButton и получить визуальное подтверждение его выбора, например, красную рамку, белый фон или что-то еще. И я хочу, чтобы так было до тех пор, пока другой JButton не будет выбран таким же образом. Прямо сейчас, когда я нажимаю на кнопку J, появляется короткое визуальное отображение, по которому она была нажата, но я не могу сделать так, чтобы она длилась дольше.

Я попытался немного поиграть с ChangeListeners, но безрезультатно.

Итак, мой вопрос в основном: какой подход вы бы посоветовали мне попробовать?

1 - вернуться к ChangeListener, это единственный вариант 2 - у JButton есть еще одна опция, которая делает именно это

Извините, если это слишком расплывчато, но все остальное, что я нашел, было супер конкретным и не отвечало на мои вопросы.

Ответы [ 2 ]

10 голосов
/ 18 ноября 2011

Интересно, хотите ли вы использовать JToggleButton, возможно, один, добавленный в ButtonGroup, чтобы одновременно выбиралась только одна кнопка.

edit
, например:

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

, который будет выглядеть так:
enter image description here

0 голосов
/ 18 ноября 2011

Вы можете попробовать изменить цвет фона:

boolean jButton1clicked = false;

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

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