2015-08-28 3 views
0

У меня есть несколько кнопок (JButton), и я хочу отключить кнопку, которая «выбрана», поэтому, если вы нажмете на другую кнопку, она станет отключена, а все остальные будут включены. Это почти как ButtonGroup, но вместо «select/deselect» это «enable/disable».Как включить/отключить кнопку, а не выбрать ее? (buttongroup)

Я не знаю, существует ли что-то уже существующее или что является лучшим подходом.

  • Расширяет ButtonGroup и переопределить все функции
  • Создание пользовательских ButtonModel и ButtonGroup как
  • Добавить ActionListener (то же самое) для каждой кнопки, которые отключают кнопку тока и включить другие
  • ...

Я думаю, что «Extends ButtonGroup ...» является лучшим, но я не уверен, почему именно я спрашиваю.

Как можно использовать ButtonGroup с включением/отключением?

Например:

Первая кнопка отключения: enter image description here
и когда я нажимаю на второй: enter image description here

нб: Он будет использоваться несколько раз для различных групп кнопок

ответ

0

Держите все ваших желаемых кнопок в группе кнопок:

ButtonGroup buttonGroup = new ButtonGroup(); 
buttonGroup.add(jbuttonA); 
buttonGroup.add(jButtonB); 
buttonGroup.add(jButtonC); 

Вы можете затем просто проверьте, выбрана ли ваша альтернативная кнопка с помощью JButton#isSelected(), чтобы затем (de) выбрать группу кнопок, используя ButtonGroup#setSelected(ButtonModel,boolean).

Кроме того, вы можете запросить его при нажатии с помощью анонимного прослушивателя действий; это требует, чтобы вы заявляли свои внешние компоненты как final.

Если вы хотите отключить JButton, может быть достаточно просто использовать JButton#setVisible(boolean).

Если вам требуется дополнительное объяснение, дайте мне знать.

+0

Я не уверен, что понял вашу «альтернативную кнопку». Все кнопки должны быть видны даже отключить один, и он должен быть отключен, но не выбран. Если вы нажмете на 'jButtonB', тогда он станет отключенным и' JButton' A и C включить, .... Всегда есть только один, который отключен. Поэтому с вашим решением, если я правильно понимаю, он не будет выбран, но он также не будет отключен. – Duffydake

+0

@ Duffydake - какова цель отключения кнопки? Не можете ли вы просто установить его видимость на «false»? Из вашего вопроса все, что вы делаете, это изменение значка (и его цвета) после его нажатия. Вы можете просто добавить флаг, чтобы проверить, включена ли кнопка в данный момент/отключена и соответственно изменить значок. – Juxhin

+0

@ Juxhin Цель не имеет большого значения. Вы не можете знать, но я использую LAF, и когда что-то отключается, он становится черно-белым, я не меняю иконки, ...на вопросительных изображениях я просто расширяю 'ButtonGroup' и переопределяю все функции с помощью« setEnable ». – Duffydake

0

Возможно, этот пример, который я сделал, может помочь.

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

import javax.swing.JButton; 
import javax.swing.JFrame; 

public class Example extends JFrame{ 

    private JButton b1 = new JButton("B1"); 
    private JButton b2 = new JButton("B2"); 

    private Listener listener = new Listener(); 

    public static void main(String args[]) { 
     new Example(); 
    } 

    public Example() { 
     setSize(500,500); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setLayout(new FlowLayout()); 

     b1.addActionListener(listener); 
     b2.addActionListener(listener); 

     add(b1); 
     add(b2); 

     setVisible(true); 
    } 

    private class Listener implements ActionListener{ 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      if(e.getSource() == b1) { 
       //Somehow loop through all your JButton group 
       //And change button.setIcon(), etc.. properties.. 
       b1.setEnabled(false); 
       b2.setEnabled(true); 
      } 
      else if(e.getSource() == b2) { 
       b2.setEnabled(false); 
       b1.setEnabled(true); 
      } 

     } 

    } 
} 
+0

Я ценю ваши усилия, может быть, мой вопрос не ясен, но мне не нужен код. Я знаю, по крайней мере, 3 способа как это сделать (даже то, что вы предлагаете, что является самым «основным»), но я не уверен, что что-то еще существует или либо, если то, что я выбрал, хорошо, изображения, о которых идет речь, используют первый метод в моем вопросе (расширяет Buttongroup) – Duffydake

Смежные вопросы