void () { RadContainer parent = myComponent.getParent(); ArrayList<RadComponent> buttonsToGroup = new ArrayList<>(); 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); } } buttonsToGroup.sort((o1, 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) { buttonsToGroup.subList(0, i + 1).clear(); 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) { buttonsToGroup.subList(i, buttonsToGroup.size()).clear(); break; } } LOG.assertTrue(buttonsToGroup.size() > 1); GroupButtonsAction.groupButtons(myEditor, buttonsToGroup); }