Checkbox UI guidelines on using checkboxes.

Implementation: JCheckBox, JBCheckBox

A preview of checkboxes in different states

Use checkboxes for yes/no choices or for selecting several items in a group:

An example of a checkbox group with two selected options

Use radio button instead if:

A radio button group with only one selected option possible Only one option in a group can be selected
Two radio buttons with clear labels The behavior in the "off" state is unclear from the checkbox label. Use two radio buttons instead and label them accordingly
A radio button group displaying the correct way for showing different states of a setting With the checkbox, it is unclear how the setting works if it’s unchecked. With radio buttons, both states are labeled clearly
A checkbox showing the correct way to use a label A label accompanies each checkbox and is placed next to it.
A checkbox with a long label split into two lines If a label is long, split it into two lines. Use HTML formatting for that.
checkBox( """<html>Insert selected suggestion by pressing space, dot,<br/> or other context-dependent keys</html>""") new JCheckBox( "<html>Insert selected suggestion by pressing space, dot,<br/>" + "or other context-dependent keys</html>");

Avoid labels that take more than two lines. See recommendations on writing concise labels below.

If a checkbox appears in a table, place the label into the column header and do not repeat it on every row.

A table with checkboxes where the label is placed into the column header

Implementation : Checkboxes are rendered in tables with BooleanTableCellRenderer and edited with DefaultCellEditor(JCheckBox) implementation. For any column that should be rendered as a checkbox, set both a renderer and editor for consistency. The type of data in the correspondent column of the Table model should either be Boolean or String containing true or false.

TableColumn column = table.getColumnModel().getColumn(COLUMN_INDEX); column.setCellEditor(JBTable.createBooleanEditor()); column.setCellRenderer(new BooleanTableCellRender());

Use sentence-style capitalization.

Do not use ending punctuation.

Use the imperative form of verbs

Correct

Incorrect

A correct checkbox with the imperative form of the verb An incorrect checkbox with the declarative form of verb

Do not use negation in labels as it complicates understanding.

Exception: "Do not show again" checkbox.

Correct

Incorrect

A correct checkbox without negation An incorrect checkbox with negation

Make labels short and intelligible — see Writing short and clear.

In a group of options, use the parent checkbox to show the status of its children.

Different states for a parent checkbox: checked, indeterminate, and unchecked

The parent checkbox in checked, indeterminate and unchecked states Implementation : The three-state checkbox is represented by the ThreeStateCheckBox class which represents its state with the ThreeStateCheckBox.State enum containing SELECTED, NOT_SELECTED, DONT_CARE states.

When the user clicks an indeterminate checkbox for the first time, the whole group becomes checked. The second click unchecks the whole group.

An indeterminate checkbox can also show the download status. An example with a remote repository:

Indeterminate checkboxes showing download status

Repositories "tools-base" and "contrib" are being loaded. When loading is finished, the indeterminate checkbox will be replaced with the checked checkbox if there are commits, or an unchecked checkbox if there are no commits.

Implementation : In a table, the three-state checkbox is represented by ThreeStateCheckBoxRenderer that provides both TableCellRenderer and TableEditor. It accepts Boolean type in the column being supplied by the TableModel and becomes DONT_CARE when the value in the cell is null. Otherwise, it becomes SELECTED for Boolean.TRUE, and NOT_SELECTED for Boolean.FALSE.

If a checkbox depends on another control, e.g., an input field, follow the rules for dependent controls. Otherwise, follow the rules for independent controls.