[Java] Oberflächenprogrammierung Barrierefrei
#1
/*
Wenn Sie diesen Code in eine neue Datei kopieren, müssen Sie die Datei
"Hierar.java" nennen.

Dieser Unit soll ein Einführungsbeispiel zur Oberflächenprogrammierung sein.
Da es nur eine Demo ist und als Einstiegsbeispiel dient, werden beim Schalter
anklicken keine Aktionen durchgeführt. Das schließen per Mausdoppelklick
Funktioniert aber. Die Oberfläche wird mit swing programmiert.

In Java gibt es mehrere LayoutManager. Das sind so eine Art "Schablone" mit der
festgelegt wird, wie nachher der Inhalt des Fensters aussieht. Hier wird das
BoderLayout verwendet. Das BoderLayout, teilt den Frame(=Fenster) in 5 Bereiche.
NORTH, SOUTH, EAST, WEST, CENTER. In jeden Bereich, kann nur eine Komponente
gestzt werden. Werden mehrere in einen Bereich rein gesetzt, so ist nur die zuletzt
eingefügte Komponente sichtbar.
Deswegen benutzt man in der Regel sogenannte Container-Komponenten
(zum Beispiel Panel) auf welchen man dann wiederum ein extra Layout definieren
kann und mehrere Komponenten rein setzen kann. (zum Beispiel wenn man das FlowLayout
verwendet)
Das GridBagLayout ist so eine Art Gitter bzw. Raster in welches mehrere Komponenten
gesetzt werden können. In jedes Rasterkästchen eine Komponente.
An dem J welches die Komponenten vor dem Namen haben, können Sie erkennen,
dass es Swing-Komponenten sind.

Nun, was ist ein Listener?
In Java gibt es keine "Postboten" wie in Windows die Botschaften verschicken.
Dafür gibt es in Java "Zuhörer"(=Listener). Mit Listener werden Ereignisse
verarbeitet. Ein Mausklick ist zum Beispiel ein solches Ereignis.
In diesem Beispiel sehen Sie, wie man einen Windowslistener einrichtet,
der dafür sorgt, dass wenn Sie rechts oben im Fenster auf das Kreuz mit der
Maus klicken, dass Fenster geschlossen wird! Würde dieser Listener fehlen,
könnte das Programm nur mit der Tastenkombination Strg+C in der Konsole
(Dos-Eingabeaufforderung) beendet werden!

Auch wird mit diesem Beispiel eine Einstiegshilfe gegeben, wie man mit
Java "behindertengerecht" programmieren kann.
Java ist die einzige Programmiersprache, die dafür eine Schnittstelle und Befehle
standardmäßig integeriert hat!
Um behindertengerecht programmieren zu können, empfiehlt auch SUN mit Swing zu programmieren.

Folgende dinge sind bei der behindertengerechten Programmierung zu beachten:
Der AccessibleName sollte immer gesetzt werden. Auch wenn Tooltips angezeigt werden,
weil der AccessibleName wird zum Beispiel von Screenreadern gelesen.
Mit der AccessibleDescription kann man einer Komponente noch eine detailiertere
Beschreibung mitgeben. Dies ist aber nicht zwingen notwendig. Deswegen braucht
die AccessibleDescription nur bei Bedarf verwendet werden.
Um einen AccessibleName setzen zu können, braucht man einen AccessibleContext.
Diesen bekommt man mit dem Befehl getAccessibleContext().
Mit dem Befehl setDisplayedMnemonic kann man Shortcuts auf Label setzen.
Um nachher die Shortcuts auszuführen muss die Taste "Alt" plus entsprechendes
Zeichen gedrückt werden.

Mit dem Befehl setMnemonic kann man Shortcuts auf Buttons setzen.
Um nachher die Shortcuts auszuführen muss die Taste "Alt" plus entsprechendes
Zeichen gedrückt werden.

Mit dem Befehl setToolTipText kann man eine Kurzhilfe definieren, die immer dann
angezeigt wird, wenn man mit der Maus über der Komponente schwebt, welche einen
ToolTipText besitzt.

Mit dem Befehl setLabelFor kann man ein Label mit einem Eingabefeld(=Textfield)
verbinden. Das bedeutet, wenn man per Shortcut den Label ansteuert, springt der
Textcursor ins dazugeörige Eingabefeld. So kann man ganz gezielt bestimmte Eingabefelder
anspringen, ohne per Tab-Taste alle durchqueren zu müssen, bis man am richtigen ist.
Der Befehl setLabelFor benötigt als Parameter den Namen vom Eingabefeld.
*/



import java.awt.*;
import javax.swing.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Hierar extends JFrame
{
Hierar()
{
super();
setTitle ("Marlem-Panel Demo-Programm");
setSize(320, 200);
getContentPane().setLayout(new BorderLayout());

JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();

JButton butFirst = new JButton("|<");
butFirst.getAccessibleContext().setAccessibleName("Button zum bewegen an die erste Position");
butFirst.setToolTipText("Button zum bewegen an die erste Position");

JButton butPrev = new JButton("<");
butFirst.getAccessibleContext().setAccessibleName("Button zum bewegen an die vorherige Position");
butPrev.setToolTipText("Button zum bewegen an die vorherige Position");
JButton butNext = new JButton(">");
butFirst.getAccessibleContext().setAccessibleName("Button zum bewegen an die nächste Position");
butNext.setToolTipText("Button zum bewegen an die nächste Position");
JButton butLast = new JButton(">|");
butFirst.getAccessibleContext().setAccessibleName("Button zum bewegen an die letzte Position");
butLast.setToolTipText("Button zum bewegen an die letzte Position");

JLabel lblName = new JLabel("Name : ");
lblName.setDisplayedMnemonic('N'); //setzt einen shortcut auf N vom label Name.

JLabel lblStr = new JLabel("Straße : ");
lblStr.setDisplayedMnemonic('S'); //setzt einen shortcut auf S vom label Strasse.

JTextField tfName = new JTextField(20);
lblName.setLabelFor(tfName); //Verbindet den label mit dem textfeld
JTextField tfStr = new JTextField(20);
lblStr.setLabelFor(tfStr); //Verbindet den label mit dem textfeld

JButton butOK = new JButton("OK");
butOK.getAccessibleContext().setAccessibleName("OK-Button");
butOK.setToolTipText("OK-Button");
butOK.setMnemonic('O'); //legt einen Shortcut für den OK-Button fest.

JButton butCancel = new JButton ("Abbrechen");
butCancel.getAccessibleContext().setAccessibleName("Abbruch-Button");
butCancel.setToolTipText("Abbruch-Button");
butCancel.setMnemonic('A'); //legt einen Shortcut für den OK-Button fest.


//Panels wird mit den buttons gefüllt
//das sind die Buttons mit den Pfeilen, die Sie im Programmfenster sehen.
panel1.add(butFirst);
panel1.add(butPrev);
panel1.add(butNext);
panel1.add(butLast);

//panel wird in den frame eingefügt
getContentPane().add(panel1,BorderLayout.NORTH);
//bei Swing wird zunächst eine Methode getContentPane aufgerufen,
// und erst auf dem von ihr zurückgegebenen Container wird das
//Dialogelement mit add plaziert

//die labels und textfelder kommen ins nächste panel
//dieses bekommt das GridBackLayout zugewiesen!
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
panel2.setLayout(gbl);

//Mit der Knstante REMAINDER wird die zeile abgeschlossen, so dass
//lblName und tfName in einer Zeile stehen und die beiden anderen
//Steuerelemente lblStr und tfstr ebenfalls in einer eigenen Zeile


panel2.add(lblName,c);
c.gridwidth = GridBagConstraints.REMAINDER;
panel2.add(tfName,c);
c.gridwidth = GridBagConstraints.RELATIVE;
panel2.add(lblStr,c);
panel2.add(tfStr,c);
getContentPane().add(panel2, BorderLayout.CENTER);


//nun kommen die buttons. das panel wird in den südlichen bereich
//des Frames eingefügt.

panel3.add(butOK);
panel3.add(butCancel);
getContentPane().add(panel3, BorderLayout.SOUTH);

setVisible(true);


//listener zum Schließen des Fensters
addWindowListener(new WindowAdapter()
{
//Diese methode muss "windowClosing(WindowEvent e)" heißen!
//Sie sorgt dafür dass das Fenster per Mausklick auf das x rechts oben
//geschlossen werden kann.
public void windowClosing(WindowEvent e) {
Hierar.this.quit();
}
});

}

//das Hauptprogramm besteht aus einer Zeile!
//die Klasse Hierar wird erstellt.
public static void main(String args[])
{
Hierar h = new Hierar();
}

//methode zum schließen des Fensters
public void quit() {

hide(); //versteckt das fenster

dispose(); //gibt resource frei

System.exit(0); //beendet java

}
}


quelle: http://marlem-software.de/jHierar.htm

noch eine kleine Anmerkung:
Barrierefrei ist ein anderes Wort für "behindertengerecht"! Big Grin
  Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste