package javacodebook.gui.radio; import java.awt.*; import java.awt.event.*; import java.beans.PropertyChangeListener; /** * @author Benjamin Rusch * * Das RadioFrame besitzt zwei Checkboxes und ein paar Radiobuttons. * Ein Checkbox wird automatisch zum RadioButton, wenn sie in einer * Checkboxgroup eingebunden ist. Es kann dann nur noch ein Feld ausgewählt * werden. * Beim Klick auf den "Print" Button wird der Status auf der Konsole ausgegeben. */ public class RadioFrame extends Frame { // Diese Checkboxes bleiben tatsächlich Checkboxes private Checkbox milk = null; private Checkbox sugar = null; // Diese Checkboxes werden später zu RadioButtons private CheckboxGroup group = new CheckboxGroup(); private Checkbox male = null; private Checkbox female = null; private Button print = new Button("Print"); /** * Konstruktor von RadioFrame. */ public RadioFrame(String title) { super(title); setLayout(new FlowLayout()); // Beim Klicken des Schließen-Buttons vom HauptFenster // wird das Programm beendet this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { System.exit(0); } }); buildCheckbox(); buildRadiobuttons(); add(print); print.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ System.out.println("Auswahl: "); // Man kann den selektierten RadioButton // über die CheckboxGroup bestimmen System.out.println("\t" + group.getSelectedCheckbox().getLabel()); // Bei Checkboxes fragt man den Status direkt ab. if(milk.getState()) System.out.println("\tMilch"); if(sugar.getState()) System.out.println("\tZucker"); } }); } /** * Zwei Checkboxen werden gebaut und aufs Frame gelegt */ private void buildCheckbox() { // Bei der einfachen Checkbox verhält sich alles sehr einfach! milk = new Checkbox("Milch"); sugar = new Checkbox("Zucker"); add(milk); add(sugar); } /** * Zwei Radiobuttons werden gebaut und aufs Frame gelegt */ private void buildRadiobuttons() { // Eine Checkbox wird automatisch zum RadioButton, wenn eine // Checkboxgroup im Konstruktor mit übergeben wird. // Über den dritten Parameter wird die Vorbelegung festgelegt. male = new Checkbox("männlich", group, true); female = new Checkbox("weiblich", group, false); add(male); add(female); } } --- Neue Klasse --- package javacodebook.gui.radio; import javax.swing.*; import javax.swing.event.*; import java.awt.event.*; import java.awt.*; /** * @author Benjamin Rusch * * 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); } } --- Neue Klasse --- package javacodebook.gui.radio; /** * @author Benjamin Rusch * In der Starter Klasse mit der main Methode wird der RadioFrame * gebaut und sichtbar gemacht. */ public class Starter { public static void main(String[] args) { RadioFrame rf = new RadioFrame("Fenster mit Radiobutton und Checkbox"); rf.setVisible(true); rf.pack(); RadioJFrame sf = new RadioJFrame("Fenster mit Radiobutton und " +"Checkbox"); sf.pack(); sf.setVisible(true); } }