2017-03-27 5 views
0

Ich habe ein kleines Programm, das die JCheckbox verwendet. Ich muss sicherstellen, dass der Benutzer höchstens 3 von 5 auswählt. Gibt es eine richtige Art, dies mit Hilfe von Zählern zu tun?Wie können wir die Anzahl der selektierten JCheckboxen manipulieren?

Die JCheckBoxes sind in einer for-Schleife enthalten. wo nur eine JCheckbox deklariert wurde, aber verschiedene Werte zugewiesen und dem JFrame innerhalb derselben for-Schleife hinzugefügt werden.

Die Schleife wurde wegen Datenabrufs aus der Datenbank verwendet.

Antwort

3

davon ausgehen, dass Ihre jcheckboxes sind innerhalb JPanel

Sie diese Funktion Anzahl der ausgewählten JCheckBox

public int getSelectedNumber(JPanel panel) { 
    int numberOfSelected = 0; 
    for (Component c : panel.getComponents()) { 
     if (c instanceof JCheckBox) { 
      numberOfSelected += ((JCheckBox) c).isSelected() ? 1 : 0; 
     } 
    } 
    return numberOfSelected; 
} 
+0

Dies sagt Ihnen, nur die Nummer ausgewählt. Es hindert Sie nicht, zu viele auszuwählen. – camickr

1

ich, dass der Benutzer höchstens um sicherzustellen, müssen erhalten können 3 von 5 auswählt. Gibt es einen richtigen Weg, es mit Zählern zu tun?

Sie möchten keine Zähler verwenden. Das sagt Ihnen nur, wie viele ausgewählt sind und hindert Sie nicht daran, zu viele auszuwählen.

Anstatt zuzulassen, dass ein Kontrollkästchen ausgewählt wird, sollten Sie überprüfen, wie viele bereits ausgewählt sind.

Zum Beispiel:

import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
import javax.swing.*; 

public class CheckBoxGroup 
{ 
    private Set<GroupButtonModel> models = new HashSet<GroupButtonModel>(); 
    private int groupSize; 

    public CheckBoxGroup(int groupSize) 
    { 
     this.groupSize = groupSize; 
    } 

    public void register(JCheckBox checkBox) 
    { 
     ButtonModel groupModel = new GroupButtonModel(); 
     groupModel.setSelected (checkBox.getModel().isSelected()); 
     checkBox.setModel(groupModel); 
    } 


    private class GroupButtonModel extends JToggleButton.ToggleButtonModel 
    { 
     @Override 
     public void setSelected(boolean selected) 
     { 
      if (!selected) 
      { 
       models.remove(this); 
       super.setSelected(selected); 
       return; 
      } 

      // Check number of currently selected check boxes 

      if (models.size() == groupSize) 
      { 
       System.out.println("Only " + groupSize + " items can be selected"); 
      } 
      else 
      { 
       models.add(this); 
       super.setSelected(selected); 
      } 

     } 
    } 

    private static void createAndShowGUI() 
    { 
     JPanel panel = new JPanel(); 
     CheckBoxGroup group = new CheckBoxGroup(3); 

     for (int i = 0; i < 10; i++) 
     { 
      JCheckBox checkBox = new JCheckBox(String.valueOf(i)); 
      panel.add(checkBox); 
      group.register(checkBox); 
     } 

     JFrame frame = new JFrame("Check Box Group"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(panel); 
     frame.setLocationByPlatform(true); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 
Verwandte Themen