public void run() { RadContainer parent = myComponent.getParent(); ArrayList<RadComponent> buttonsToGroup = new ArrayList<RadComponent>(); for(RadComponent component: parent.getComponents()) { if (FormInspectionUtil.isComponentClass(myComponent.getModule(), component, JRadioButton.class)) { if (component.getConstraints().getCell(!myVerticalGroup) == myComponent.getConstraints().getCell(!myVerticalGroup)) buttonsToGroup.add(component); } } Collections.sort(buttonsToGroup, new Comparator<RadComponent>() { public int compare(final RadComponent o1, final RadComponent o2) { if (myVerticalGroup) { return o1.getConstraints().getRow() - o2.getConstraints().getRow(); } return o1.getConstraints().getColumn() - o2.getConstraints().getColumn(); } }); // ensure that selected radio buttons are in adjacent cells, and exclude from grouping // buttons separated by empty cells or other controls int index=buttonsToGroup.indexOf(myComponent); LOG.assertTrue(index >= 0); int expectCell = myComponent.getConstraints().getCell(myVerticalGroup); for(int i=index-1; i >= 0; i--) { expectCell = FormEditingUtil.adjustForGap(parent, expectCell-1, myVerticalGroup, -1); if (buttonsToGroup.get(i).getConstraints().getCell(myVerticalGroup) != expectCell) { removeRange(buttonsToGroup, 0, i); break; } } expectCell = myComponent.getConstraints().getCell(myVerticalGroup); for(int i=index+1; i<buttonsToGroup.size(); i++) { expectCell = FormEditingUtil.adjustForGap(parent, expectCell+1, myVerticalGroup, 1); if (buttonsToGroup.get(i).getConstraints().getCell(myVerticalGroup) != expectCell) { removeRange(buttonsToGroup, i, buttonsToGroup.size()-1); break; } } LOG.assertTrue(buttonsToGroup.size() > 1); GroupButtonsAction.groupButtons(myEditor, buttonsToGroup); }