class AvailableStatisticsChooser extends javax.swing.JPanel {

    private final JSqueezeBoxPanel squeezeBoxPanel = new JSqueezeBoxPanel();
    private final Map<JCheckBox, StatisticsUI> uiMap = new HashMap<>();
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JPanel metricsPanel;
    // End of variables declaration//GEN-END:variables

    public AvailableStatisticsChooser() {
        initComponents();
        metricsPanel.add(squeezeBoxPanel, BorderLayout.CENTER);
    }

    public void setup(StatisticsModelUI model, StatisticsCategory[] categories) {

        //Sort categories by position
        Arrays.sort(categories, new Comparator() {

            @Override
            public int compare(Object o1, Object o2) {
                Integer p1 = ((StatisticsCategory) o1).getPosition();
                Integer p2 = ((StatisticsCategory) o2).getPosition();
                return p1.compareTo(p2);
            }
        });

        //Get UI
        StatisticsUI[] statisticsUIs = Lookup.getDefault().lookupAll(StatisticsUI.class).toArray(new StatisticsUI[0]);

        for (StatisticsCategory category : categories) {
            MigLayout migLayout = new MigLayout("insets 0 0 0 0");
            migLayout.setColumnConstraints("[grow,fill]");
            migLayout.setRowConstraints("[min!]");
            JPanel innerPanel = new JPanel(migLayout);

            //Find uis in this category
            List<StatisticsUI> uis = new ArrayList<>();
            for (StatisticsUI sui : statisticsUIs) {
                if (sui.getCategory().equals(category.getName())) {
                    uis.add(sui);
                }
            }

            //Sort it by position
            Collections.sort(uis, new Comparator() {

                @Override
                public int compare(Object o1, Object o2) {
                    Integer p1 = ((StatisticsUI) o1).getPosition();
                    Integer p2 = ((StatisticsUI) o2).getPosition();
                    return p1.compareTo(p2);
                }
            });

            for (StatisticsUI sui : uis) {
                JCheckBox checkBox = new JCheckBox(sui.getDisplayName());
                checkBox.setOpaque(false);
                checkBox.setSelected(model.isStatisticsUIVisible(sui));
                uiMap.put(checkBox, sui);
                innerPanel.add(checkBox, "wrap");
            }

            if (uis.size() > 0) {
                squeezeBoxPanel.addPanel(innerPanel, category.getName());
            }
        }
    }

    public void unsetup() {<FILL_FUNCTION_BODY>}

    /**
     * This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        metricsPanel = new javax.swing.JPanel();

        metricsPanel.setLayout(new java.awt.BorderLayout());

        metricsPanel.setLayout(new java.awt.BorderLayout());

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(metricsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE)
                    .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(metricsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 433, Short.MAX_VALUE)
                    .addContainerGap())
        );

        add(metricsPanel, java.awt.BorderLayout.CENTER);
    }// </editor-fold>//GEN-END:initComponents
}

        //Only called when OK
        StatisticsControllerUI controller = Lookup.getDefault().lookup(StatisticsControllerUI.class);

        for (Map.Entry<JCheckBox, StatisticsUI> entry : uiMap.entrySet()) {
            controller.setStatisticsUIVisible(entry.getValue(), entry.getKey().isSelected());
        }
    
<methods>public void <init>() ,public void <init>(java.awt.LayoutManager) ,public void <init>(boolean) ,public void <init>(java.awt.LayoutManager, boolean) ,public javax.accessibility.AccessibleContext getAccessibleContext() ,public javax.swing.plaf.PanelUI getUI() ,public java.lang.String getUIClassID() ,public void setUI(javax.swing.plaf.PanelUI) ,public void updateUI() <variables>private static final java.lang.String uiClassID