2013-07-26 2 views
1

Есть 12 JButtons в JPanel. Я хочу щелкнуть один из них и отключить все остальные (он будет «выделен»). И затем, если я нажму на отключенный, тогда предыдущий отключится, и процесс будет таким же. Я хочу сделать это, используя итерацию и собственный метод, учитывая, что есть 12 кнопок, и я хочу избежать повторения кода.Как включить JButton одним щелчком мыши, а затем отключить все остальные путем итерации?

Учтите, что 12 JButtons уже объявлены. Затем мы создаем ArrayList из JButtons для их хранений и ArrayList из булевых хранить свои булевы с поддержкой стоимостей:

ArrayList<JButton> arrayOfButtons = new ArrayList<JButton>(); 
ArrayList<Boolean> arrayOfBooleans = new ArrayList<Boolean>(); 

Мы добавляем все кнопки на arrayOfButtons:

arrayOfButtons.add(btn1); 
arrayOfButtons.add(btn2); 
arrayOfButtons.add(btn3); 
arrayOfButtons.add(btn4); 
arrayOfButtons.add(btn5); 
arrayOfButtons.add(btn6); 
arrayOfButtons.add(btn7); 
arrayOfButtons.add(btn8); 
arrayOfButtons.add(btn9); 
arrayOfButtons.add(btn10); 
arrayOfButtons.add(btn11); 
arrayOfButtons.add(btn12); 

И тогда мы хранить в arrayOfBooleans их состояния позволили итерируя над arrayOfButtons:

for (int i = 0; i < arrayOfButtons.size(); i++) { 
    arrayOfBooleans.add(arrayOfButtons.get(i).isEnabled()); 
} 

Теперь, как я могу реализовать MouseListener и создать благоприятные-по-исключения системы Итера ting over arrayOfButtons? Идея довольно проста: «Включите ее, отключите других», но я не могу понять, как это сделать на практике.

Благодарю вас!

ответ

2

«И тогда, если я нажму отключен, тогда предыдущий отключится, и процесс будет таким же» не имеет смысла. Если кнопка отключена, она не сможет реагировать на ввод от пользователя.

Хотя контекст немного света, то почему бы не использовать JToggleButton с вместо

Взгляните на How to use buttons еще несколько деталей

Это также означало бы, вы могли бы сгруппировать все кнопки в ButtonGroup, который будет заботиться о убедившись, что только одна кнопка была «активной» в то время

обновленного с простым примером

enter image description here

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.util.ArrayList; 
import java.util.List; 
import javax.swing.ButtonGroup; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JToggleButton; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class ToggleButtons { 

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

    public ToggleButtons() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     private List<JToggleButton> listOfButtons; 
     private ButtonGroup commonButtonGroup; 

     public TestPane() { 
      commonButtonGroup = new ButtonGroup(); 
      listOfButtons = new ArrayList<>(25); 
      setLayout(new GridBagLayout()); 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridwidth = GridBagConstraints.REMAINDER; 
      for (int index = 0; index < 10; index++) { 
       JToggleButton tb = new JToggleButton(Integer.toString(index)); 
       commonButtonGroup.add(tb); 
       listOfButtons.add(tb); 
       add(tb, gbc); 
      } 
     } 
    } 
} 
+0

Я не знал о существовании такого понятия, как «ButtonGroup». Это может быть действительно полезно. И я также рассмотрю JToggleButton. Я знаю, что это не имеет никакого смысла, но именно поэтому я реализую MouseListener (а не ActionListener). Я благодарю вас за ваш ответ! –

+0

Я должен указать, что вы можете взглянуть на использование 'JRadioButton' вместо' JToggleButton', но это сведется к тому, что вы пытаетесь достичь – MadProgrammer