Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Numero massimo di checkbox selezionabili

    salve a tutti....
    data una serie di 10 check box vorrei che le caselle selezionabili dall'utente non siano più di 3.
    Com'è possibile?

  2. #2
    Usi un contatore che viene incrementato ogni volta che si clicca su un checkbox e quando raggiunge il valore di 3, rendi tutti gli altri disattivii con setEnabled (false)... mi pare che così funzioni, prova

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Numero massimo di checkbox selezionabili

    Originariamente inviato da stefano085
    data una serie di 10 check box vorrei che le caselle selezionabili dall'utente non siano più di 3.
    Com'è possibile?
    Si potrebbe pensare di estendere ButtonGroup. Ecco un esempio:

    codice:
    import java.awt.*;
    import java.util.*;
    import javax.swing.*;
    
    public class TestFrame extends JFrame
    {
        public TestFrame ()
        {
            super ("Test Frame");
            setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
            setSize (250, 150);
            setLayout (new FlowLayout (FlowLayout.LEFT));
    
            JCheckBox cb1 = new JCheckBox ("A");
            JCheckBox cb2 = new JCheckBox ("B");
            JCheckBox cb3 = new JCheckBox ("C");
            JCheckBox cb4 = new JCheckBox ("D");
    
            MultiButtonGroup group = new MultiButtonGroup (2);
    
            Container c = getContentPane ();
            c.add (cb1);
            c.add (cb2);
            c.add (cb3);
            c.add (cb4);
    
            group.add (cb1);
            group.add (cb2);
            group.add (cb3);
            group.add (cb4);
        }
    
        public static void main (String[] args)
        {
            SwingUtilities.invokeLater (new Runnable ()
            {
                public void run ()
                {
                    TestFrame f = new TestFrame ();
                    f.setVisible (true);
                }
            });
        }
    }
    
    
    class MultiButtonGroup extends ButtonGroup
    {
        private int maxCount;
        private HashSet<ButtonModel> set;
    
        public MultiButtonGroup (int maxCount)
        {
            this.maxCount = maxCount;
            set = new HashSet<ButtonModel> ();
        }
    
        public void add (AbstractButton b)
        {
            if (b == null)
                return;
    
            buttons.addElement (b);
            setSelected (b.getModel (), b.isSelected ());
            b.getModel ().setGroup (this);
        }
    
        public void remove (AbstractButton b)
        {
            if (b == null)
                return;
    
            buttons.removeElement (b);
            set.remove (b.getModel ());
            b.getModel ().setGroup (null);
        }
    
        public boolean isSelected (ButtonModel m)
        {
            return set.contains (m);
        }
    
        public void setSelected (ButtonModel m, boolean b)
        {
            if (b && set.size() < maxCount)
                set.add (m);
            else
                set.remove (m);
        }
    }
    Prova a selezionare più di 2 checkbox .... non te li fa più selezionare. (2 è il numero che ho passato a MultiButtonGroup).

    Non sono sicuro al 100% che sia una ottima soluzione ... dopotutto ButtonGroup era stato pensato per gestire una "mutua esclusione" quindi solo 1 button selezionato tra tutti gli N button nel group. Infatti ha un metodo getSelection() che ritorna il model del button selezionato .... e di cui non ho fatto l'override perché sarebbe un po' dubbio ... che ritorno???

    La mia soluzione comunque è semplice e molto "riutilizzabile" e funziona non solo con JCheckBox ma anche ad esempio con dei JToggleButton!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.