[Java] Oberflächenprogrammierung Barrierefrei - Druckversion +- net-board.net Archiv (https://net-board.net) +-- Forum: Deine eigene Homepage (https://net-board.net/forumdisplay.php?fid=26) +--- Forum: Scriptsprachen (+Datenbanksysteme) (https://net-board.net/forumdisplay.php?fid=19) +---- Forum: Tutorials und Artikel: Programmieren und Datenbanken (https://net-board.net/forumdisplay.php?fid=15) +---- Thema: [Java] Oberflächenprogrammierung Barrierefrei (/showthread.php?tid=3011) |
[Java] Oberflächenprogrammierung Barrierefrei - marlem - 07.11.2003 /* 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"! |