Warum habt ihr hier den kein Thema über Linux bzw. Unix-Server. Die meisten Webserver laufen doch über Linux bzw Unix. Oder habt ihr hier noch nichts von Linux bzw. Unix gehört ?
ich fürchte ich kann hier viele sachen anbieten, aber jetzt fange
ich mal mit meinem spezialgebiet an!
barrierefrei ist das moderne wort für "behindertengerecht".
ich bin spezialist wenn es darum geht was zu tun ist,
damit software bzw. internetseiten "barrierefrei" sind!
einige meine programme sind auf pcwelt shareware des
tages geworden http://www.marlem-software.de/referenzen.html ,
im febrauar habe ich in der c't als co-autor an einen bericht mitgeschrieben
über behinderte und web http://www.heise.de/ct/03/04/088/default.shtml
und im mai war ich in trier wo ich vor 130 leuten einen vortrag hielt über behinderte und internet http://www.mehr-wert-fuer-alle.de/programm/vortrag4.htm .
im focus ausgabe 5/2003 kamm ein bericht über browser in welchem auch ein zitat von mir drin kamm.
also, wenn ihr beratung braucht auf diesem gebiet, seid ihr bei mir richtig
gruß
markus
p.s. wie man aus den tutorials entnehmen kann, weiß ich auch schon bisserl
was wie man java-programme barrierefrei hinbekommt
/*
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.
*/
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
//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() {
In dieser Klasse wird ein einfaches Applet erstelt.
Ein Applet ist eine Art Java-Programm welches in eine
HTML-Seite eingefügt wird. Applets sind heutzutage nicht mehr
so in weil Sie langsam sind.
Es gibt 5 verschiedene Methoden die in einem Applet vorkommen können.
Sie müssen aber nicht alle vorkommen.
init()
Mit dieser Methode informiert der Browser dass es geladen wurde.
In dieser Methode werden alle notwendigen Objekte erzeugt und nitialisiert.
destroy()
Diese Methode wird aufgerufen um zu signalisieren, dass das Applet demnächst
beendet wird. Hier können noch Resourcen freigegeben werden.
paint(Graphics)
Diese Methode wird aufgerufen, wenn der sichtbare Grafikbereich im Browser neu
gezeichnet werden muss.
start()
Mit dieser Methode wird dem Applet signalisiert,dass sein Ablauf beginnen kann.
stop()
Mit dieser Methode wird dem Applet signalisiert, dass sein Ablauf beendet werden
muss.
In diesem Beispiel verwende ich nur init. In ihr wird die Oberfläche "aufgebaut".
Das folgende Applet zeigt ein Formular, in welches man Name und E-Mailadresse
eingeben kann. Wenn man auf den Schalter "OK" klickt, wird die Emailadresse
überprüft ob sie das @-zeichhen und einen Punkt beinhaltet.
Wenn nicht bekommt man eine Meldung.
das einbinden des Applets in eine HTML-Seite kann so aussehen:
Die Angaben width und heigt geben die Größe des Applets an.
Wenn sie zu klein gewählt sind, kann man gewisse Elemente nicht sehen,
weil zu wenig Platz ist um sie darzustellen.
//Labels für die Ausgabe
Label lblNameausg;
Label lblMailausg;
//panels als Container
Panel pnleingabefelder1;
Panel pnlButton;
Panel pnlAusgabe1;
//Die Komponenten werden in der Methode init.
public void init()
{
pnleingabefelder1 = new Panel();
pnlButton = new Panel();
pnlAusgabe1 = new Panel();
//leerer Label
Label lblLeer = new Label ();
//Beschriftungen
Label labelname = new Label ("Name: ");
Label labelmail = new Label ("E-Mail: ");
//Eingabefelder
tfname = new TextField(20);
tfmail = new TextField(20);
//Schalter
Button button = new Button("OK");
button.addActionListener(this);
lblNameausg = new Label("Name: ");
lblMailausg = new Label("Mail: ");
//Der Hintergrund des Applets bekommt das BorderLayout.
//So können die Panels optimal platziert werden.
this.setLayout(new BorderLayout());
this.add(pnleingabefelder1, BorderLayout.NORTH);
this.add(pnlButton, BorderLayout.CENTER);
this.add(pnlAusgabe1, BorderLayout.SOUTH);
}
//Die Ereignismethode welche die Emailadresse überprüft.
public void actionPerformed(ActionEvent e)
{ //hier wird die email-adresse überprüft
String mailaddi;
mailaddi = tfmail.getText();
//mit indexOf kann innerhalb eines Strings nach einem bestimmten Zeichen gesucht
//werden.
if (mailaddi.indexOf("@") == -1)
{
lblNameausg.setText("Name: " + tfname.getText());
//Wenn dass @-zeichen in der Mailadresse fehlt kommt eine Fehlermeldung
lblMailausg.setText("Bei der Email-Adresse fehlt das @");
}
else
if (mailaddi.indexOf(".") == -1)
{
lblNameausg.setText("Name: " + tfname.getText());
//Wenn der Punkt in der Mailadresse fehlt kommt eine Fehlermeldung
lblMailausg.setText("Bei der Email-Adresse fehlt der .");
}
else
{
//ansonsten wird Name und Mailadresse wiederholt.
lblNameausg.setText("Name: " + tfname.getText());
lblMailausg.setText("Mail: " + tfmail.getText());
Als Informatiker bin ich mit der Script-Programmierung, vorzugsweise ASP vertraut.
Honorar
Die Honorarhöhe richtet sich bei einzelnen Projekten an dem jeweiligen Programmieraufwand aus und kann mit mir individuell ausgehandelt werden.
Bei größeren Projekten erfolgt seitens des Auftraggebers eine Abnahme von bereits erstellten Arbeitsmoduln mit entsprechendem Teil-Honorar. Die Definition und Honorierung einzelner Module wird zuvor beiderseitig vereinbart.
Auf Wunsch kann ein Pflichtenheft geführt werden.
Bei Interesse nehmen Sie bitte unter der E-Mail Adresse Admin@boldluck.at mit mir Kontakt auf.
Für weitere Fragen stehe ich Ihnen selbstverständlich gerne zur Verfügung