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);
}
}
- 8685 views