12.1.3 GUI IO (Swing)
12.1.3 GUI IO (Swing)Java bietet mit AWT (Another Window Tool Kit) und Swing reichhaltige Bibliotheken zum Entwurf von graphischen Benutzeroberflächen.
Hinweis: "Swing" (Schaukel) ist der Projektname. Swing ist Teil der Java Foundation Classes (JFC).
Einfache grafische "Swing" Oberfläche
Das folgende Beispiel dient als einfaches Rahmenprogramm für Text Ein- und Ausgaben.
Es übernimmt die Erzeugung eines Fensters mit:
- Eingabefeld für einen Text
- Ausgabefeld für einen Text
- 3 Buttons zum Verarbeiten des Texts in drei Methoden
Der eigene Algorithmus wird in der Methode public String executeOperation1(String) oder der beiden anderen executeOpteration Methoden implementiert.
Hierzu werden die folgenden Swing-Klassen verwendet
- JFrame: Erzeugen eines Fensters
- JLabel: Erzeugen eines festen Texts
- JTextField: Textfelder zur Ein- und Ausgabe von Texten
- JButton: Knopf(Button) zum Triggern einer Aktion
- ActionListener:Ausführen einer Aktion. Hier als anonyme Klasse implementiert.
Das erscheinende Fenster sieht wie folgt aus:
Das Fenster nach einer Texteingabe ("Eingabe"):
Das Fenster nach dem Drücken des Knopf "Do twice". Es wurde die Methode executeOperation2() aufgerufen:
Die Methoden executeOperation1(), executeOperation2(), executeOperation3() erlauben eine Implementierung des eigenen Algorithmus. Der erforderliche String in der Rückgabe wird dann im Fenster angezeigt.
Anbei das Beispielprogramm mit der Klasse DemoFrame:
package s2.swing; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JPanel; public class DemoFrame extends javax.swing.JFrame { private javax.swing.ButtonGroup buttonGroup1; private javax.swing.JPanel jPanel1; private javax.swing.JLabel jLabel1; private javax.swing.JTextField jTextField1; private javax.swing.JTextField jTextField2; private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JButton jButton3; private void initComponents() { jLabel1 = new javax.swing.JLabel(); jTextField1 = new javax.swing.JTextField(); jTextField2 = new javax.swing.JTextField(); jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("My first JFrame"); jLabel1.setText("Input Text:"); jTextField1.setText("Input"); jTextField2.setText("Output"); jTextField2.setEditable(false); jButton1.setText("Do once:"); jButton2.setText("Do twice:"); jButton3.setText("Do three times:"); JPanel radioPanel = new JPanel(new GridLayout(1, 0)); radioPanel.add(jButton1); radioPanel.add(jButton2); radioPanel.add(jButton3); jButton1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(e.getSource() == jButton1) jTextField2.setText( executeOperation1(jTextField1.getText())); } } ); jButton2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(e.getSource() == jButton2) jTextField2.setText( executeOperation2(jTextField1.getText())); } } ); jButton3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(e.getSource() == jButton3) jTextField2.setText( executeOperation3(jTextField1.getText())); } } ); this.setBounds(300, 300, 200, 30); setMinimumSize(new Dimension(200,30)); getContentPane().add(jLabel1, BorderLayout.WEST); getContentPane().add(jTextField1, BorderLayout.CENTER); getContentPane().add(radioPanel, BorderLayout.NORTH); getContentPane().add(jTextField2, BorderLayout.SOUTH); pack(); } public DemoFrame() { initComponents(); } public static void main(String[] args) { DemoFrame f1 = new DemoFrame(); f1.setVisible(true); } public String executeOperation1(String s) { // Add Application logic here: String result = "Button 1:" + s; return (result) ; } public String executeOperation2(String s) { // Add Application logic here: String result = "Button 2:" + s + s; return (result) ; } public String executeOperation3(String s) { // Add Application logic here: String result = "Button 3:" + s + s +s; return (result) ; } }
Eine Swingoberfläche zum Erfassen von drei Texten
Die Klasse DemoFrame1 stellt drei Eingabefelder zum Erfassen von Texten zur Verfügung und erlaubt das Starten von 3 Operationen:
Implementierung der Klasse DemoFrame 1
package s2.swing; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; /** * * @author s@scalingbits.com */ public class DemoFrame1 extends javax.swing.JFrame { private ButtonGroup buttonGroup1; private JPanel jPanel1; private JLabel jLabel1; private JTextField jTextFieldin[]; private JTextField jTextField2; private JButton jButton1; private JButton jButton2; private JButton jButton3; /** * Anzahl der Eingabefelder */ private int inFields = 3; /** * Initialisieren aller Komponenten */ private void initComponents() { jLabel1 = new JLabel(); jTextFieldin = new JTextField[inFields]; for (int i = 0; i < inFields; i++) { jTextFieldin[i] = new JTextField(); } jTextField2 = new JTextField(); jButton1 = new JButton(); jButton2 = new JButton(); jButton3 = new JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("My second JFrame"); jLabel1.setText("Input Text:"); // Belegen alle Eingabefelder mit Standwerten for (int i = 0; i < inFields; i++) { jTextFieldin[i].setText("Input" + i); } // Belegen des Augabefeldes mit Standartwert jTextField2.setText("Output"); jTextField2.setEditable(false); // Erzeugen dreier Buttons jButton1.setText("Do once:"); jButton2.setText("Do twice:"); jButton3.setText("Do three times:"); // Ezeugen einer Datenstruktur(Panel) die drei Buttons aufnimmt JPanel radioPanel = new JPanel(new GridLayout(1, 0)); radioPanel.add(jButton1); radioPanel.add(jButton2); radioPanel.add(jButton3); // Führe Operation 1 aus wenn Button 1 gedrückt wird jButton1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (e.getSource() == jButton1) { jTextField2.setText(executeOperation1( jTextFieldin[0].getText(), jTextFieldin[1].getText(), jTextFieldin[2].getText())); } } }); // Führe Operation 2 aus wenn Button 2 gedrückt wird jButton2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (e.getSource() == jButton2) { jTextField2.setText(executeOperation2( jTextFieldin[0].getText(), jTextFieldin[1].getText(), jTextFieldin[2].getText())); } } }); // Führe Operation 3 aus wenn Button 3 gedrückt wird jButton3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (e.getSource() == jButton3) { jTextField2.setText(executeOperation3( jTextFieldin[0].getText(), jTextFieldin[1].getText(), jTextFieldin[2].getText())); } } }); // Allgemeine Konfiguration des Fensters this.setBounds(300, 300, 200, 30); setMinimumSize(new Dimension(200, 30)); // Einfügen der Eingabeaufforderung links getContentPane().add(jLabel1, BorderLayout.WEST); // Panel zum verwalten von mehreren Eingabefelder JPanel inputPanel = new JPanel(new GridLayout(inFields, 0)); for (int i = 0; i < inFields; i++) { inputPanel.add(jTextFieldin[i]); } // Einfügen des Panels mit Eingabefeldern in der Mitte getContentPane().add(inputPanel, BorderLayout.CENTER); // Einfügen des Panels mit Buttons oben getContentPane().add(radioPanel, BorderLayout.NORTH); // Einfügen der Ausgabezeile unten getContentPane().add(jTextField2, BorderLayout.SOUTH); pack(); } /** * Initialierung alle Komponenten */ public DemoFrame1() { initComponents(); } /** * Hauptprogramm: Erzeuge eine Instanz von DemoFrame1 und zeige sie an * @param args */ public static void main(String[] args) { DemoFrame1 f1 = new DemoFrame1(); f1.setVisible(true); } /** * Führe Operation 1 aus (Button 1 wurde gedrückt) * @param s1 * @param s2 * @param s3 * @return */ public String executeOperation1(String s1, String s2, String s3) { // Add Application logic here: String result = "Button 1:" + s1 + s2 + s3; return (result); } /** * Führe Operation 2 aus (Button 2 wurde gedrückt) * @param s1 * @param s2 * @param s3 * @return */ public String executeOperation2(String s1, String s2, String s3) { // Add Application logic here: String result = "Button 2:" + s1 + s2 + s3; return (result); } /** * Führe Operation 3 aus (Button 3 wurde gedrückt) * @param s1 * @param s2 * @param s3 * @return */ public String executeOperation3(String s1, String s2, String s3) { // Add Application logic here: String result = "Button 3:" + s1 + s2 + s3; return (result); } }
- 8616 views