Mit einem Java JButton kann man Elemente innerhalb eines Programms steuern. Praktischer Weise hat der Java JButton verschiedene Eigenschaften, die man für sich nutzen kann.
In den unteren Beispielen wird gezeigt, wie man schnell einen Button auslesen kann. Allerdings ist das nicht unbedingt empfehlenswert, da dieses Programm nur auf den einen Button ausgelegt ist. Es existieren zwei Möglichkeiten um festzustellen, welchen Button man betätigt hat: Entweder liest man die Source aus oder fragt nach einem ActionCommand.
Ich verwende immer letztere Methode, da ich damit auch mein Menü an den ActionListener binden kann, sodass ich mehrere Buttons erstellen kann, aber nur einmal die Logik (was soll passieren?) programmieren muss. Das folgende Beispiel soll zeigen, wie man die Source von zwei Button ausliest.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; public class ViewJButton extends JFrame { private static final long serialVersionUID = 6813784118231602778L; public ViewJButton(){ this.setTitle("JButton im JFrame"); this.setBounds(100, 100, 300, 200); this.setVisible(true); final JButton button = new JButton("Drücke mich !"); ActionListener al = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { button.setText((button.getText().equals("Hallo")) ? "Exit" : "Hallo"); } }; button.addActionListener(al); this.add(button); } } |
In den unteren Beispiele gibt es jeweils zwei Buttons, welche zum Hoch- (inc) und Runterzählen dienen (dec). Jedes mal, wenn eine Action ausgelöst wird, wird diese über ein ActionCommand weitergegeben. In der Methode actionperformed wird entschieden, was damit passieren soll, bei inc wird der Wert um eins Hochgezählt und bei dec wird -wer hätte das gedacht?- um eins Runtergezählt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class ViewJButton extends JFrame implements ActionListener { private static final long serialVersionUID = 6813784118231602778L; private int zahl = 0; private JButton dec, inc, close; private JLabel anzeigerZahl = new JLabel(Integer.toString(zahl)); public ViewJButton(){ this.setTitle("JButton im JFrame"); this.setBounds(100, 100, 300, 200); this.setVisible(true); this.setLayout(new BorderLayout()); Container pane = this.getContentPane(); // Das Label packe ich auf in mein BorderLayout pane.add(anzeigerZahl, BorderLayout.CENTER); // Button fürs Runterzählen this.dec = new JButton("dec"); this.dec.addActionListener(this); pane.add(this.dec, BorderLayout.LINE_START); // Button fürs rauszählen this.inc = new JButton("inc"); this.inc.addActionListener(this); pane.add(this.inc, BorderLayout.LINE_END); this.close = new JButton("Programm schließen"); this.close.addActionListener(this); pane.add(this.close, BorderLayout.PAGE_END); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource().equals(this.dec)){ this.zahl = zahl - 1; this.anzeigerZahl.setText(Integer.toString(this.zahl)); } if(e.getSource().equals(this.inc)){ this.zahl = zahl + 1; this.anzeigerZahl.setText(Integer.toString(this.zahl)); } if(e.getSource().equals(this.close)){ System.exit(0); } } } |
Im letzten Beispiel wird immer auf einen ActionCommand (String) geprüft.
Zwei Strings kann problemlos und schnell miteinander vergleichen, weiterhin hält das Prüfen auf ActionCommands in einem Programm den Code angenehm übersichtlich. Der absolute Vorteil von ActionCommands besteht aber darin, dass mehrere Buttons die gleiche Action (Code) auslösen können.
Zu Demonstrationszwecken wurde hier z.B. eine JMenuBar erweitert.
Für noch mehr Informationen geht’s hier entlang -> Java MVC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
package view; import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; public class ViewJButton extends JFrame implements ActionListener { private static final long serialVersionUID = 6813784118231602778L; private int zahl = 0; private JButton dec, inc, close; private JLabel anzeigerZahl = new JLabel(Integer.toString(zahl)); public ViewJButton(){ this.setTitle("JButton im JFrame"); this.setBounds(100, 100, 300, 200); this.setVisible(true); this.setLayout(new BorderLayout()); Container pane = this.getContentPane(); // Das Label packe ich auf in mein BorderLayout pane.add(anzeigerZahl, BorderLayout.CENTER); // Button fürs Runterzählen this.dec = new JButton("dec"); this.dec.setActionCommand("dec"); this.dec.addActionListener(this); pane.add(this.dec, BorderLayout.LINE_START); // Button fürs rauszählen this.inc = new JButton("inc"); this.inc.setActionCommand("inc"); this.inc.addActionListener(this); pane.add(this.inc, BorderLayout.LINE_END); this.close = new JButton("Programm schließen"); this.close.setActionCommand("close"); this.close.addActionListener(this); pane.add(this.close, BorderLayout.PAGE_END); // Zum Vorführen baue ich noch eine JMenuBar JMenuBar menu = new JMenuBar(); JMenu hier = new JMenu("Hier"); JMenuItem exit = new JMenuItem("schließen"); exit.setActionCommand("close"); exit.addActionListener(this); hier.add(exit); menu.add(hier); this.setJMenuBar(menu); } @Override public void actionPerformed(ActionEvent e) { String ac = e.getActionCommand().toString().toUpperCase(); if(ac.equals("DEC")){ this.zahl = zahl - 1; this.anzeigerZahl.setText(Integer.toString(this.zahl)); } if(ac.equals("INC")){ this.zahl = zahl + 1; this.anzeigerZahl.setText(Integer.toString(this.zahl)); } if(ac.equalsIgnoreCase("close")){ System.exit(0); } } } |