{"id":955,"date":"2021-01-12T20:41:18","date_gmt":"2021-01-12T20:41:18","guid":{"rendered":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/?page_id=955"},"modified":"2021-01-12T21:16:50","modified_gmt":"2021-01-12T21:16:50","slug":"checkboxes-radio-buttons","status":"publish","type":"page","link":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/course-topics\/swing-gui-components\/checkboxes-radio-buttons\/","title":{"rendered":"Checkboxes &#038; Radio Buttons"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a3fa18f6a181\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a3fa18f6a181\"  aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/course-topics\/swing-gui-components\/checkboxes-radio-buttons\/#Checkboxes\" >Checkboxes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/course-topics\/swing-gui-components\/checkboxes-radio-buttons\/#Radio_Buttons\" >Radio Buttons<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/course-topics\/swing-gui-components\/checkboxes-radio-buttons\/#Button_Group_Usage\" >Button Group Usage<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/course-topics\/swing-gui-components\/checkboxes-radio-buttons\/#Determining_which_Radio_Button_is_Set_within_a_Group\" >Determining which Radio Button is Set within a Group<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n\n<p class=\"wp-block-paragraph\">Two of the simplest kinds of GUI components are <em>checkboxes<\/em> and <em>radio buttons<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s examine them here&#8230;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Checkboxes\"><\/span>Checkboxes<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">To give your users the choice of a limited set of options, it&#8217;s often a good idea to present them with a set of <em>checkboxes<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A checkbox provides an&nbsp;<em>on or off<\/em>,&nbsp;<em>true or false<\/em>, or&nbsp;<em>Boolean&nbsp;<\/em>type of choice.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because it is a simple, on\/off, kind of item, it is considered pretty much like a regular button, and supports&nbsp;<code><strong>ActionEvent<\/strong><\/code>s in the same way as regular buttons.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; auto-links: false; highlight: [11,51,52,53,54,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75]; title: ; quick-code: false; notranslate\" title=\"\">\npackage swingExamples;\n\nimport java.awt.BorderLayout;\nimport java.awt.Color;\nimport java.awt.Container;\nimport java.awt.Font;\n\nimport java.awt.event.ActionEvent;\nimport java.awt.event.ActionListener;\n\nimport javax.swing.JCheckBox;\nimport javax.swing.JFrame;\nimport javax.swing.JLabel;\nimport javax.swing.JPanel;\n\nclass CheckboxesPanel extends JPanel\n{\n  public CheckboxesPanel()\n  {\n    setLayout(new BorderLayout());\n    add(new TextPanel(), BorderLayout.CENTER);\n    add(new InputPanel(), BorderLayout.SOUTH);\n  }\n  \n  void setTextFont(int style)\n  {\n    m_text.setFont(new Font(&quot;SansSerif&quot;, style, 12));\n  }\n  \n  \/\/\/\/\/\/\/ Private data \/\/\/\/\/\n  private JLabel m_text = \n      new JLabel(\n      &quot;The quick brown fox jumps over the lazy dog&quot;);\n  \n  \/\/\/\/\/\/\/ Inner classes \/\/\/\/\/\n  class TextPanel extends JPanel\n  {\n    public TextPanel()\n    {\n      setBackground(Color.white);\n      setTextFont(Font.PLAIN);\n      add(m_text);\n    }\n  }\n  \n  class InputPanel extends JPanel \n      implements ActionListener\n  {\n    public InputPanel()\n    {\n      add(m_boldCheckBox);\n      m_boldCheckBox.addActionListener(this);\n      add(m_italicCheckBox);\n      m_italicCheckBox.addActionListener(this);\n    }\n    \n    public void actionPerformed(ActionEvent ev)\n    {\n      int style = Font.PLAIN;\n      if (m_boldCheckBox.isSelected())\n      {\n        style |= Font.BOLD;\n      }\n      if (m_italicCheckBox.isSelected())\n      {\n        style |= Font.ITALIC;\n      }\n      setTextFont(style);\n    }\n    \n    \/\/\/\/\/ Private data \/\/\/\/\/\n    private JCheckBox m_boldCheckBox = \n                        new JCheckBox(&quot;Bold&quot;);\n    private JCheckBox m_italicCheckBox = \n                        new JCheckBox(&quot;Italic&quot;);\n  }\n}\n\nclass CheckboxesFrame extends JFrame\n{\n  public CheckboxesFrame()\n  {\n    setTitle(&quot;CheckBoxes&quot;);\n    setSize(300, 200);\n    setDefaultCloseOperation(EXIT_ON_CLOSE);\n    Container contentPane = getContentPane();\n    contentPane.add( new CheckboxesPanel() );\n  }\n}\n\npublic class Checkboxes\n{\n  public static void main(String&#x5B;] args)\n  {\n    CheckboxesFrame frame = new CheckboxesFrame();\n    frame.setVisible(true);\n  }\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">which displays:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-content\/uploads\/2021\/01\/CheckBoxesPlain.gif\" alt=\"\" class=\"wp-image-959\"\/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image size-large\"><figure class=\"alignleft size-large\"><img decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-content\/uploads\/2021\/01\/CheckBoxesBold.gif\" alt=\"\" class=\"wp-image-960\"\/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image size-large\"><figure class=\"alignleft size-large\"><img decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-content\/uploads\/2021\/01\/CheckBoxesItalic.gif\" alt=\"\" class=\"wp-image-961\"\/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-content\/uploads\/2021\/01\/CheckBoxesBoldItalic.gif\" alt=\"\" class=\"wp-image-962\"\/><\/figure><\/div>\n\n\n\n<div style=\"height:33px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Radio_Buttons\"><\/span>Radio Buttons<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If the choices you wish the user to make are mutually exclusive choices, then you need <em>radio buttons<\/em> instead of checkboxes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You group radio buttons into a <em>button group<\/em>, and the button group ensures that only one of the radio buttons in the group is set at any given time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s an example:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; auto-links: false; highlight: [11,12,63,64,65,66,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,100,101,102,103,104,105,106,107,108,109]; title: ; quick-code: false; notranslate\" title=\"\">\npackage swingExamples;\n\nimport java.awt.BorderLayout;\nimport java.awt.Color;\nimport java.awt.Container;\nimport java.awt.Font;\n\nimport java.awt.event.ActionEvent;\nimport java.awt.event.ActionListener;\n\nimport javax.swing.ButtonGroup;\nimport javax.swing.JRadioButton;\nimport javax.swing.JFrame;\nimport javax.swing.JLabel;\nimport javax.swing.JPanel;\n\nclass RadioButtonsPanel extends JPanel\n{\n  public RadioButtonsPanel()\n  {\n    setLayout(new BorderLayout());\n    add(new TextPanel(), BorderLayout.CENTER);\n    add(new InputPanel(), BorderLayout.SOUTH);\n  }\n  \n  void setTextSize()\n  {\n    m_text.setFont(\n        new Font(&quot;SansSerif&quot;, Font.BOLD, m_size) );\n  }\n  \n  \/\/\/\/\/\/\/ Private data \/\/\/\/\/\n  \n  \/\/ Font sizes\n  private static final int TINY = 6;\n  private static final int MEDIUM = 12;\n  private static final int LARGE = 14;\n  private static final int HUMONGOUS = 20;\n  \n  private int m_size = MEDIUM; \n                      \/\/ Current font size\n  \n  private JLabel m_text = \n      new JLabel(\n      &quot;The quick brown fox jumps over the lazy dog&quot;);\n  \n  \/\/\/\/\/\/\/ Inner classes \/\/\/\/\/\n  class TextPanel extends JPanel\n  {\n    public TextPanel()\n    {\n      setBackground(Color.WHITE);\n      setTextSize();\n      add(m_text);\n    }\n  }\n  \n  class InputPanel extends JPanel \n      implements ActionListener\n  {\n    public InputPanel()\n    {\n      addRadioButton(m_tiny);\n      addRadioButton(m_medium);\n      addRadioButton(m_large);\n      addRadioButton(m_humongous);\n    }\n    \n    public void actionPerformed(ActionEvent ev)\n    {\n      Object source = ev.getSource();\n      if (source == m_tiny)\n      {\n        m_size = TINY;\n      }\n      else if (source == m_medium)\n      {\n        m_size = MEDIUM;\n      }\n      else if (source == m_large)\n      {\n        m_size = LARGE;\n      }\n      else if (source == m_humongous)\n      {\n        m_size = HUMONGOUS;\n      }\n      setTextSize();\n    }\n    \n    private JRadioButton addRadioButton(JRadioButton button)\n    {\n      add(button);\n      m_group.add(button);\n      button.addActionListener(this);\n      return button;\n    }\n    \n    \/\/\/\/\/ Private data \/\/\/\/\/\n    private ButtonGroup m_group = \n\t\t\t  new ButtonGroup();\n    private JRadioButton m_tiny = \n\t\t\t  new JRadioButton(&quot;Tiny&quot;);\n    private JRadioButton m_medium = \n\t\t\t  new JRadioButton(&quot;Medium&quot;, true);\n    private JRadioButton m_large = \n\t\t\t  new JRadioButton(&quot;Large&quot;);\n    private JRadioButton m_humongous = \n\t\t\t  new JRadioButton(&quot;Humongous&quot;);\n  }\n}\n\nclass RadioButtonsFrame extends JFrame\n{\n  public RadioButtonsFrame()\n  {\n    setTitle(&quot;RadioButtons&quot;);\n    setSize(300, 200);\n    setDefaultCloseOperation(EXIT_ON_CLOSE);\n    Container contentPane = getContentPane();\n    contentPane.add( new RadioButtonsPanel() );\n  }\n}\n\npublic class RadioButtons\n{\n  public static void main(String&#x5B;] args)\n  {\n    RadioButtonsFrame frame = \n                    new RadioButtonsFrame();\n    frame.setVisible(true);\n  }\n}\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">which produces:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-content\/uploads\/2021\/01\/RadioButtonsMedium.gif\" alt=\"\" class=\"wp-image-975\"\/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-content\/uploads\/2021\/01\/RadioButtonsTiny.gif\" alt=\"\" class=\"wp-image-976\"\/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-content\/uploads\/2021\/01\/RadioButtonsLarge.gif\" alt=\"\" class=\"wp-image-977\"\/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-content\/uploads\/2021\/01\/RadioButtonsHumongous.gif\" alt=\"\" class=\"wp-image-978\"\/><\/figure><\/div>\n\n\n\n<div style=\"height:29px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Button_Group_Usage\"><\/span>Button Group Usage<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Determining_which_Radio_Button_is_Set_within_a_Group\"><\/span>Determining which Radio Button is Set within a Group<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">In the original Java AWT, radio buttons were handled differently from the Swing approach.&nbsp;&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In the AWT approach:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>There is no separate class for radio buttons;&nbsp; the class <strong><code>java.awt.Checkbox<\/code><\/strong> is used for both checkboxes and radio buttons.<\/li><li>To turn checkboxes into radio buttons, all you have to do is add them to a&nbsp;<strong><code>java.awt.CheckboxGroup<\/code>,<\/strong> and their visual representation changes automatically.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In particular, the&nbsp;<code><strong>CheckboxGroup<\/strong><\/code>&nbsp;class has a method:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public Checkbox <strong>getSelectedCheckbox<\/strong>()<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">which allows you to find out which of the checkboxes in the&nbsp;<code>CheckboxGroup<\/code>&nbsp;is selected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Unfortunately, there is no equivalent mechanism for&nbsp;<strong><code>JRadioButton<\/code>s<\/strong> and&nbsp;<strong><code>ButtonGroup<\/code>s<\/strong> in Swing.&nbsp; When they moved to a Model-View-Controller separation of state versus presentation approach, they sacrificed some of the simplicity of the original approach.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is much harder to figure out how to do the same thing in Swing.&nbsp; You have to resort to <strong>Action<\/strong>s to do it, and it&#8217;s more awkward that it ought to be.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s an example:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; auto-links: false; highlight: [26,27,28,29,30,31,32,33,34,35,36,37,38,39,44,45,46,47,48,49,64,66,67,74,75,81,85,91]; title: ; quick-code: false; notranslate\" title=\"\">\npackage swingExamples;\n\nimport java.awt.BorderLayout;\nimport java.awt.Color;\nimport java.awt.Container;\n\nimport java.awt.event.ActionEvent;\nimport java.awt.event.ActionListener;\n\nimport javax.swing.ButtonGroup;\nimport javax.swing.JFrame;\nimport javax.swing.JPanel;\nimport javax.swing.JRadioButton;\n\nclass ColorRadioButtonsPanel extends JPanel\n{\n  public ColorRadioButtonsPanel()\n  {\n    setLayout(new BorderLayout());\n    add(m_colorPanel, BorderLayout.CENTER);\n    add(new InputPanel(), BorderLayout.SOUTH);\n  }\n  \n  private void setPanelColor()\n  {\n    Color back = null;\n    if (m_colorCommand.equals(YELLOW))\n    {\n      back = Color.YELLOW;\n    }\n    else if (m_colorCommand.equals(BLUE))\n    {\n      back = Color.BLUE;\n    }\n    else if (m_colorCommand.equals(RED))\n    {\n      back = Color.RED;\n    }\n    m_colorPanel.setBackground(back);\n  }\n  \n  \/\/\/\/\/\/\/ Private data \/\/\/\/\/\/\/\n  \n  \/\/ Action commands\n  private static final String YELLOW = &quot;Yellow&quot;;\n  private static final String BLUE = &quot;Blue&quot;;\n  private static final String RED = &quot;Red&quot;;\n  private String m_colorCommand = YELLOW; \n                                  \/\/ Current color &quot;command&quot;\n  \n  private ColorPanel m_colorPanel = new ColorPanel();\n  \n  \/\/\/\/\/\/\/ Inner classes \/\/\/\/\/\n  \n  class ColorPanel extends JPanel\n  {\n  }\n  \n  class InputPanel extends JPanel \n      implements ActionListener\n  {\n    public InputPanel()\n    {\n      addRadioButton(m_yellow, YELLOW);\n      m_yellow.setSelected(true); \/\/ Make yellow the default\n      addRadioButton(m_blue, BLUE);\n      addRadioButton(m_red, RED);\n      setPanelColor();\n    }\n    \n    \/\/ ActionListener required methods\n    public void actionPerformed(ActionEvent evt)\n    {\n      m_colorCommand = \n          m_group.getSelection().getActionCommand();\n      setPanelColor();\n    }\n    \n    private JRadioButton addRadioButton(\n                            JRadioButton button, \n                            String command)\n    {\n      add(button);\n      m_group.add(button);\n      button.setActionCommand(command);\n      button.addActionListener(this);\n      return button;\n    }\n    \n    \/\/\/\/\/ Private data \/\/\/\/\/\n    private ButtonGroup m_group = new ButtonGroup();\n    private JRadioButton m_yellow = new JRadioButton(&quot;Yellow&quot;);\n    private JRadioButton m_blue = new JRadioButton(&quot;Blue&quot;);\n    private JRadioButton m_red = new JRadioButton(&quot;Red&quot;);\n  }\n}\n\nclass ColorRadioButtonsFrame extends JFrame\n{\n  public ColorRadioButtonsFrame()\n  {\n    setTitle(&quot;ColorRadioButtons&quot;);\n    setSize(300, 200);\n    setDefaultCloseOperation(EXIT_ON_CLOSE);\n    Container contentPane = getContentPane();\n    contentPane.add( new ColorRadioButtonsPanel() );\n  }\n}\n\npublic class ColorRadioButtons\n{\n  public static void main(String&#x5B;] args)\n  {\n    ColorRadioButtonsFrame frame = \n                new ColorRadioButtonsFrame();\n    frame.setVisible(true);\n  }\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">which produces:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-content\/uploads\/2021\/01\/ColorRadioButtonsYellow.gif\" alt=\"\" class=\"wp-image-983\"\/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-content\/uploads\/2021\/01\/ColorRadioButtonsBlue.gif\" alt=\"\" class=\"wp-image-984\"\/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-content\/uploads\/2021\/01\/ColorRadioButtonsRed.gif\" alt=\"\" class=\"wp-image-985\"\/><\/figure><\/div>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Two of the simplest kinds of GUI components are checkboxes and radio buttons. Let&#8217;s examine them here&#8230; Checkboxes To give your users the choice of a limited set of options, it&#8217;s often a good idea to present them with a set of checkboxes. A checkbox provides an&nbsp;on or off,&nbsp;true or false, or&nbsp;Boolean&nbsp;type of choice. Because [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":71,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_eb_attr":"","_uag_custom_page_level_css":"","ocean_post_layout":"left-sidebar","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"ocs-course-topics-sidebar","ocean_second_sidebar":"0","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"0","ocean_custom_header_template":"0","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"0","ocean_menu_typo_font_family":"0","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"0","footnotes":""},"class_list":["post-955","page","type-page","status-publish","hentry","entry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"ocean-thumb-m":false,"ocean-thumb-ml":false,"ocean-thumb-l":false},"uagb_author_info":{"display_name":"Bryan Higgs","author_link":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/author\/bryan\/"},"uagb_comment_info":0,"uagb_excerpt":"Two of the simplest kinds of GUI components are checkboxes and radio buttons. Let&#8217;s examine them here&#8230; Checkboxes To give your users the choice of a limited set of options, it&#8217;s often a good idea to present them with a set of checkboxes. A checkbox provides an&nbsp;on or off,&nbsp;true or false, or&nbsp;Boolean&nbsp;type of choice. Because&hellip;","_links":{"self":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/pages\/955","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/comments?post=955"}],"version-history":[{"count":15,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/pages\/955\/revisions"}],"predecessor-version":[{"id":990,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/pages\/955\/revisions\/990"}],"up":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/pages\/71"}],"wp:attachment":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/media?parent=955"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}