package javacodebook.gui.radio; import javax.swing.*; import javax.swing.event.*; import java.awt.event.*; import java.awt.*; /** * Fenster mit Checkboxen und RadioButtons. */ public class RadioJFrame extends JFrame { private JCheckBox milk = null; private JCheckBox sugar = null; private ButtonGroup group = new ButtonGroup(); private JRadioButton male = null; private JRadioButton female = null; private Container content = null; /** * Konstruktor von RadioJFrame. */ public RadioJFrame(String title) { super(title); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); content = this.getContentPane(); content.setLayout(new FlowLayout()); buildCheckbox(); buildRadiobuttons(); } /** * Zwei Checkboxes werden gebaut und aufs Frame gelegt */ private void buildCheckbox() { // Beschriftung der Checkbox wird im Konstruktor übernommen milk = new JCheckBox("Milch"); sugar = new JCheckBox("Zucker"); // Komponenten werden auf die ContentPane platziert content.add(milk); content.add(sugar); /* // optional könnte man auch die Checkboxen gruppieren, so dass immer // nur eine Checkbox markiert sein darf ButtonGroup cgroup = new ButtonGroup(); cgroup.add(milk); cgroup.add(sugar); */ // Will man das Event beim Statuswechsel abfangen, kann man den // ActionListener verwenden sugar.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(sugar.isSelected()) System.out.println("Mit Zucker"); else System.out.println("Doch kein Zucker"); } }); milk.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(milk.isSelected()) System.out.println("Mit Milch"); else System.out.println("Doch keine Milch"); } }); // Ändert den Status ohne ein Event auszulösen sugar.setSelected(true); // Ändert den Status, und löst dabei ein Event aus milk.doClick(); } /** * Zwei Radiobuttons werden gebaut und aufs Frame gelegt */ private void buildRadiobuttons() { // Beschriftung der RadioButtons wird im Konstruktor vorgenommen male = new JRadioButton("männlich"); female = new JRadioButton("weiblich"); // Komponenten werden auf die ContentPane platziert content.add(male); content.add(female); // die Komponenten werden, neben der physikalischen Platzierung // auf dem Container, auch logisch einer Gruppe zugeordnet. // Entweder der male oder der female Button kann angeklickt sein // nie beide zugleich group.add(male); group.add(female); } }