\documentclass[12pt,a4paper]{article}
\usepackage[dvips]{graphicx}
\usepackage[finnish]{babel}
\usepackage{t1enc}
\usepackage{latexsym}
\begin{document}

%%%%%%%%%%%%%%% Begin of Document %%%%%%%%%%%%%%%%%%%%%

%\begin{figure}[!h]
%  \centering \includegraphics{treenodes.eps}
%  \caption{Kuvateksti.}
%  \end{figure}

%%%%%%%%% KÄYTTÖLIITTYMÄ %%%%%%%%%

\section{Käyttöliittymä(HT ja ET)}\label{Käyttöliittymä}

Tässä kappaleessa kuvataan JouTo-ohjelmiston käyttöliittymä rakenne ja ulkoasu
sekä tekninen toteutus. Jokainen käyttöliittymän osa on kuvattu omassa kappaleessan.

\subsection{Käytettävät tekniikat(HT)}\label{Käytettävät tekniikat}

Ohjelmiston kehityksessä käytetään Bordland JBuider 4 -kehitystyökalua ja sen
tarjoamia ominaisuuksia. JBuilder 4 käyttää standardeja Java-kirjastoja sekä
AWT että Swing-komponentteja joita käytetään käyttöliittymän kehittämisessä.
\\
Ohjelmistossa käytetään Javan versiota 1.2.2 ja vastaavia Swing\--komponentteja.

\subsection{Käyttöliittymän elementit}\label{Käyttöliittymän elementit}

Tässä luvussa kerrotaan JouTo-ohjelmiston asiakkaan puolen käyttöliittymän eri
elementeistä ja niiden teknisestä toteutuksesta.

\subsubsection{Valikot}\label{Valikot} 

Tässä kappaleessa kuvataan ohjelmistosta löytyvät valikot ja niiden toteutusperiaatteet.

\subsubsection*{Valikkojen toiminta ja sisältö}\label{Valikkojen toiminta ja sisältö}

Ohjelmiston valikoista käyttäjä pääsee ohjaaman monia ohjelman toimintoja. Ohjelmassa 
on neljä valikkoa: File, Edit, Options ja About. 
\\
File-valikosta löytyvät seuraavat toiminnot

\begin{itemize}
\item \emph{New}-toiminnolla käyttäjä voi avata uuden artikkelin.
\item \emph{Open}-toiminnolla käyttäjä voi avata aikaisemmin tallennetun artikkelin.
\item \emph{Save}-toiminnolla käyttäjä tallettaa editorissa olevan artikkelin.
\item \emph{Save As New}-toiminnolla käyttäjä voi tallettaa artikkelin uudella nimellä tallentamatta sitä edellisen artikkelin päälle.
\item  \emph{Exit}-toiminnolla käyttäjä pääsee pois ohjelmasta.
\end{itemize} 
\\
Edit-valikosta löytyvät seuraavat toiminnot                                     

\begin{itemize} 
\item \emph{Undo}-toiminnolla käyttäjä voi perua edellisen tekstinmuokkaustoimintonsa.
\item \emph{Redo}-toiminnolla käyttäjä voi perua edellisen Undo-operaation.
\item \emph{Cut}-toiminnolla käyttäjä voi leikata valitun tekstialueen.
\item \emph{Copy}-toiminnolla käyttäjä voi kopioida valitun tekstialueen.
\item \emph{Paste}-toiminnolla valittu tekstialue voidaan joko siirtää tai kopioida.
\end{itemize}
\\
Options-valikosta löytyvät seuraavat toiminnot                                     

\begin{itemize} 
\item \emph{Article Options}-toiminnolla käyttäjä pääsee muokkaamaan ja tarkastelemaan artikkeliin liittyviä tietoja.
\end{itemize}
\\
About-valikosta löytyvät seuraavat toiminnot                                     

\begin{itemize} 
\item \emph{About JouTo}-toiminnolla käyttäjä pystyy tarkastelemaan ohjelman tietoja.
\end{itemize}

\\
\begin{figure}[!h]
  \centering \includegraphics{box.eps}
  \caption{Valikot} \label{kuva_valikot}
\end{figure}

Kuvassa \ref{kuva_valikot} nähdään ohjelman valikot Java Swing-komponenteilla toteutettuna.

\subsubsection*{Valikkojen tekninen toteutus}\label{Valikkojen tekninen toteutus}

Menut sijaitsevat Appletin ylälaidassa ja ne on tehty Java Swing-komponenteilla.
Varsinaiset menujen luonnin ja niiden kiinnittämiset suoritetaan sen luokan
konstruktorissa joka ne luo.Menubar pitää kiinnittää johonkin top-level containeriin,
tässä tapauksessa JFrameen, jotta se näkyy myös käyttäjälle.\\
Esimerkki menujen luomisesta:
\begin{verbatim}

   import javax.swing.*;

 ... // luokkajulistukset jne.

   JMenuBar menuBar;        // JMenuBar-komponentti luo menubarin
   JMenu menu,              // JMenu-komponentti luo yksittäisen menun
   JMenuItem menuItem;      // JMenuItem-komponentti luo menun yhden valinnan

   //Luodaan varsinainen menubar
   menuBar = new JMenuBar();
   setJMenuBar(menuBar);

   //Luodaan varsinainen menu juuri luotuun menubariin
   menu = new JMenu("A Menu");
   menuBar.add(menu);

   //Luodaan menu-elementti juuri luotuun menuun
   menuItem = new JMenuItem("A text-only menu item")
   menu.add(menuItem);

\end{verbatim}
Menuihin voidaan myös helposti liittää kuvia sekä pikanäppäimiä.
\\ \\
Menuihin liittyy myös menu-elementtien tapahtumakuuntelijat, jotka ilmaisevat
ohjelmalle käyttäjän valinnat. Tällöin luokan pitää toteuttaa \emph{ActionListener}
-tapahtumakuuntelija sekä käsitellä valikoista tulleet tapahtumat.
\\
\begin{verbatim}

// Luokka MenuDemo toteuttaa ActionListener-kuuntelijan, joka mahdollistaa
// valikoiden tapahtumien kuuntelemisen
public class MenuDemo ... implements ActionListener {
                                     
    ...
    // Luokan MenuDemo konstruktori lisää tapahtumakuuntelijat menuihin
    public MenuDemo() {
        // Jokaiseen menu-elementtiin tulee vastaava kiinnitys
        menuItem.addActionListener(this);
        ...
    }
    
		// metodia actionPerfomed (ActionEvent e) kutsutaan kun jokin
		// ActionEvent-luokan totettanut luokka generoi tapahtuman. Tässä
		// metodissa pitää menujen tapahtumat käsitellä
    public void actionPerformed(ActionEvent e) {
        // Otetaan selvää mikä tapahtuma on kyseessä
        // Tehdään tarpeelliset toimenpiteet
    
\end{verbatim}

\subsubsection{Tool Bar (ET)}\label{Tool Bar}
 
Tool bar (työkalupalkki) sijaitsee Appletin ylälaidassa menun alapuolella
ja se on toteutettu Java Swing-komponenteilla.
      
\subsubsection*{Tool Barin kuvaus}
    
Tool bar on jaettu kahteen riviin, ja siitä löytyy kolmen tyyppisiä painikkita
\begin{itemize}
\item Tekstin ja ohjelman toimintoja: undo, redo, cut, copy, paste ja special.
\item Block-tason elementtien käsittelyyn liittyvät napit: paragraph, pre-formated,
		bulleted list, numbered list ja blockquote.
\item Inline-tason elementtien käsittelyyn liittyvät napit: person, location, 
 		organization ja quote.
\end{itemize}

Näistä painikkeista aktivoidaan aina ne kuvakkeet jotka ovat sillä hetkellä
mahdollisia toimintoja ts. käyttäjällä on mahdollista tehdä kuvakkeen ilmentämä
toiminto siinä tilateessa. Tool barin kuvakkeiden tilojen muutoksista vastaa
UIManager-luokka.

\begin{figure}[!h]
  \centering \includegraphics{box.eps}
  \caption{Tool bar} \label{kuva_toolbar}
\end{figure}

Kuvassa \ref{kuva_toolbar} nähdään kuva työkalupalkin toteutuksesta 
Java Swing-komponenteilla.

%DTD:n mukaisessa toolbarin ensimmäisessä osassa ovat block -kuvakkeet.
%Seuraavassa osassa ovat inline -kuvakkeet viimeiseesä osassa ovat undo -, redo
%-ja emphase -kuvakkeet. Valitun DTD:n mukaiset kuvakkeet aktivoidaan UIManagerin
%toimesta, ts. käytettävissä olevat kuvakkeet näkyvät käyttäjälle aktiivisina.
%Ne elementtikuvakkeet, jotka eivät ole sallittuja tämän DTD:n mukaisessa
%pohjassa, ovat tummennettuja.
    
\subsubsection*{Tool Barin tekninen toteutus}
 
Toolbarin ja sen komponenttien luonnin ja kiinnittäminen suoritetaan sen luokan
konstruktorissa joka ne luo. JouTo-projektissa tool barin luo UIManager-luokka.
Toolbar kiinnitetään Frameen valikon alapuolelle.
\\
Tool Barin luonti: 
\begin{verbatim} 
   // Käytettävä kirjasto 
   import javax.swing.*;

   ...

   // Luodaan ilmentymä JToolBar-luokasta 
   JToolBar toolBar = new JToolBar();
   // Lisäätään napit (kts. seuraavaa ohjelmakoodia)
   addButtons(toolBar);	
   
   // Lisätään luotu Tool bar JPanel-containeriin
   JPanel contentPane = new JPanel();
   contentPane.setLayout(new BorderLayout());
   contentPane.add(toolBar, BorderLayout.NORTH);
 
\end{verbatim} 

Tool Bariin voidaan lisätä komponetteja ja konponentteihin voidaan liittää
kuvia.

\begin{verbatim} 
 
    ...
   
   // Tätä metodia kutsuttiin edellisessä esimerkissä lisäämään kuvakkeen tool bariin
   protected void addButtons(JToolBar toolBar) {
                JButton button = null;
 
                //Esimerkissä lisätään images-hakemistossa oleva left.gif - kuva
                button = new JButton(new ImageIcon("images/left.gif"));
                ... 
                toolBar.add(button);
                
\end{verbatim} 
\\
Tool Bariin voidaan lisätä myös eroittimia.

\begin{verbatim} 
    
   toolBar.addSeparator();
 
\end{verbatim} 
\\
Tool Barin tapahtumakuuntelijat luodaan samalla tavoin kuin valikoiden
tapahtumakuuntelijat (katso lukua \ref{Valikot} saadaksesi lisätietoa).
Jokaiseen tool bariin lisättävät komponentin on huolehdittava että lisää
itseensä tapahtumakuuntelijan.
\\
Osa kuvakkeista aktivoidaan ja deaktivoidaan riippuen käyttäjän valinnoista ja
sen hetkisestä tilasta. Tämä tehdään kutsumalla \emph{setButtonsActive}-metodia.
Kutsumisesta ja parametrien oikeellisuudesta huolehtii UIManager-luokka.
\begin{verbatim} 
 
   public setButtonsActive(buttonList: Object)
                 
   parametri    Osoite elementtilistan alkuun.
                 
   palaute:     Boolean.

   toiminta:    Aktivoi listassa mainitut elementtikuvakkeet. Ilmoittaa
                UIManagerille, että kuvakkeiden aktivoinnit on suoritettu.
    
\end{verbatim} 


\subsection{Metatieto}

Metatieto-osio sijaitsee tool barin (työkalupalkki) alla. Se on toteutettu 
Java Swing-komponenteilla.

\subsubsection*{Metatieto-osion kuvaus}

Metatieto-osiossa on yleistä tietoa artikkelista ja artikkelin kirjoittajasta.
Metatieto-osiosta löytyvät seuraavat tiedot

\begin{itemize}
\item Kirjoittajan nimi
\item Kirjoitusajankohta
\item Uutisen tyyppi
\end{itemize}

\begin{figure}[!h]
  \centering \includegraphics{box.eps}
  \caption{Metatieto-osio} \label{kuva_metatieto}
\end{figure}

Kuvassa \ref{kuva_metatieto} nähdään Java Swing-komponenteilla toteutettu 
metatieto-osio.

\subsubsection*{Metatieto-osion tekninen totetutus}

Metadata-osio koostuu valmiista Swing-komponenteista eli JPanel-kentästä ja sen sisään 
laitettavista komponenteista (JTextField,JTextArea, JComboBox). Kentän arvoja muokataan
ulkoa käsin suoraan UIManager-luokasta antamalla komponenttien huolehtia itsensä 
piirtämisestä.

Esimerkkikoodi:
\begin{verbatim}
   // Käytetään Swing-kirjastoa
   import javax.swing.*;
    ...

   // Luodaan uusi JPanel
   JPanel aPanel = new JPanel();
   // Asetetaan luotuun JPaneliin haluttu layout
   aPanel.setLayout(new BorderLayout());

   ...
   
   // Luodaan halutut komponentit, jotka on tarkoitus laittaa JPaneliin
   JTextField Poksi = new JTextField(20); 
   
   //Elementteihin laitetaan myös käsittelijät tutkimaan niiden muutoksia
   // kuten kohdassa \ref{Menut}
   Poksi.addActionListener(this);
  

   // Lisätään elementit JPaneliin käyttämällä add-metodia
   aPanel.add(Poksi);
   ...

	// Kirjoitetaan elementtiin
	aPanel.Poksi.setText="Tämä on tekstiä";

\end{verbatim}

\subsubsection{Artikkeli}

Varsinainen artikkeli sijaitsee tässä osiossa. Artikkeli-osuus koostuu valmiista 
Java Swing-komponenteista ja JouTo-projektissa luodusta Body-komponentista. 

\subsubsection*{Artikkeli-osion kuvaus}

Varsinainen artikkeli sijaitsee tässä osiossa. Artikkelista riippuvat otsikkotiedot
sekä varsinainen artikkelin sisältö on jaettu erillisiin osiin. Otsikkotiedot näytetään
Java Swing-komponenteissa artikkelista riippuvassa järjestyksessä, ja varsinainen
artikkelin runko pidetään JouTo-projektissa luodussa Body-komponentissa.
\\
Sekä otsikkotiedot että artikkelin runko ovat tabulaattorilistassa omissa välilehdissään.

\begin{figure}[!h]
  \centering \includegraphics{box.eps}
  \caption{Artikkelin otsikkotiedot} \label{kuva_otsikkotiedot}
\end{figure}

Kuvassa \ref{kuva_otsikkotiedot} nähdään esimerkki artikkelin otsikkotiedot-osiosta
toteutettuna Java Swing-komponenteilla.

\begin{figure}[!h]
  \centering \includegraphics{box.eps}
  \caption{Artikkelin runko - Body-elementti} \label{kuva_body}
\end{figure}

Kuvassa \ref{kuva_body} nähdään varsinaisen artikkelin kirjoitukseen tarkoitetun 
Body-komponentin toteutus. Body-komponentti on JouTo-ohjelmistossa totetutettu komponentti.
Lisätietoja Body-komponentista ja sen toteutuksesta löytyy kappaleesta \ref{kun ei ole mihin vittu viitata!}

\subsubsection*{Artikkeli-osion tekninen toteutus}

Artikkeli-osio Java Swing-komponenteilla luotu artikkelista riippuva
komponenttiryhmä, johon sisältyy vielä JouTo-projektissa luotu Body-komponentti. 
JTabbelPane-komponentti pitää sisällään valitusta artikkelista 
riippuvien tietojen elementtejä toisessa tabulaattorilehdessään ja artikkelin 
editointiin tarkoitettua Body-komponenttia toisessa.
\\ \\
JTabbedPane-komponentti voi sisältää seuraavat Swing-komponentit
\begin{itemize}
\item JTextField
\item JTextArea
\item JComboBox
\item JScrollPanel
\end{itemize}
\\
Nämä komponentit asetellaan JTabbedPane-komponenttiin artikkelista riippuvassa
järjestyksessä.
\\
JTabbedPanel-komponettiin lisätään artikkelista riippuvat kentät. (JTextField,
JTextArea) Näiden sisältöä muokataan suoraan UIManager-luokasta. 
\\
\begin{verbatim}
   import javax.swing.*;
   ...

   JTabbelPane jTabbelPane = new JTabbelPane();
   JTextBox jTextBox = new JTextBox("Poksi");

   // Lisätään uusi tabulaattorilehti, jossa on teksti One ja tooltip Does Nothing

   jTabbedPane.addTab("One", "Does nothing");
   // Indeksi 0 tarkoittaa ensimmäistä
   tabbedPane.setSelectedIndex(0);

   ...
   
   // Lisätään komponentteja JTabbedPaneen
   jTabbedPane.add(jTextBox);

	...

\end{verbatim}
\\


\subsubsection{Statusbar}\label{Statusbar}

Status baria käytetään informaation välittämiseen ohjelmalta käyttäjälle.

\subsubsection*{Status barin kuvaus}\label{Status barin kuvaus}

Status bar on ikkunan alalaidassa oleva osa. Status baria käytetään näyttämään 
informaatiota ohjelmasta ja mahdollisia virheilmoituksia käyttäjälle.

\begin{figure}[!h]
  \centering \includegraphics{box.eps}
  \caption{Status bar} \label{kuva_statusbar}
  \end{figure}
\end{figure}

Kuvassa nähdään ohjelmiston Status bar ja siinä oleva esimerkkituloste.

\subsubsection*{Status barin tekninen toteutus}\label{Status barin tekninen toteutus}

Status bar sisältyy siihen ikkunaan, jossa ohjelmaa ajetaan eikä sitä tarvitse erikseen
luoda Javalla. Kuitenkin ikkunaa luodessa tulee Status bar luoda siihen ikkunaan
jossa ohjelmaa ajetaan, jotta sitä voidaan ylipäätään käyttää. \\
Status baria käsitellään seuraavalla koodilla

\begin{verbatim}

    showStatus("Tämä teksti tulee Status Bariin")

\end{verbatim}
\\
Seuraava metodi tarjotaan ulospäin
\begin{verbatim}
public boolean writeToStatusBar(String text)

   parametri    Status bariin tulostettava teksti
                 
   palaute:     Boolean-arvo, joka ilmoittaa onnistumisen tai epäonnistumisen

   toiminta:    Metodi kirjoittaa Status barin arvoksi annetun tekstin. Metodi
                tarkistaa annetun arvon järkevyyden ja huolehtii mahdollisien
                poikkeiksien käsittelystä. 
\end{verbatim}


\subsection{Käyttöliittymän dialogit (ET)}\label{Käyttöliittymän dialogit}
 
Ohjelmistossa dialogeja käytetään ottamaan vastaan käyttäjän syötteitä sekä
näyttämään käyttäjälle ohjelman vaihtoehtoja sekä tulosteita.
 
Valikot
 
Käyttöliittymän dialogeja ovat New, Open, Save ja Save As New -toiminnot.
Käyttöliittymässä näytetään myös työn eteneminen käyttäjälle. Tällöin
käyttäjälle annetaan palautetta siitä, että järjestelmä suorittaa pyydettyä
toimenpidettä.
 
\subsubsection{Dialogien kuvaukset}

\subsubsection*{New-dialogi}\label{New-dialogi}
 
Käyttöliittymään tuodaan Servletiltä listaus DTD:istä, joista listan
ensimmäinen on se tyypillisin DTD. Tyypillisin DTD on myös valittu,
jolloin käyttäjän ei tarvitse muuta kuin jatkaa suoraan eteenpäin mikäli
käyttäjä ei halua valita jotakin muuta DTD:tä. Valitulta DTD:ltä saadaan
sen id, jonka perusteella haetaan Servletiltä DTD:n mukainen artikkelipohja.
Käyttöliittymässä on OK -ja Cancel -painikkeet.

\begin{figure}[!h]
  \centering \includegraphics{box.eps}
  \caption{New-dialogi} \label{dialogi_new}
\end{figure}
 
Kuvassa \ref{dialogi_new} nähdään Java Swing-komponenteilla toteutettu
dialogi.

\subsubsection*{Open-dialogi}\label{Open-dialogi}
 
Käyttöliittymään tuodaan Serletiltä listaus artikkeleista laskevassa
järjestyksessä kirjoituspäivämäärän mukaan, joista viimeisin artikkeli
on valittuna. Liittymässä näytetään vain kymmenen ensimmäistä artikkelia. 
Lisää artikkeleita saa vierittämällä palkista. Artikkelista liittymässä
näytettävät tiedot ovat: pääotsikko, kuvaus, kirjoittaja ja kirjoituspäivämäärä.
Pääotsikon kentän pituus on 25 merkkiä ja kuvauksen 50 merkkiä. Mikäli
merkkijonot ovat pitempiä kuin mitä liittymässä on mahdollista näyttää, 
näytetään käyttäjälle merkkijonon jatkuminen kolmella pisteellä. Valitulta   
artikkelista saadaan sen id, jonka perusteella saadaan Servletiltä artikkelin
DTD:n id. Käyttöliittymään haetaan ensin DTD:n mukainen artikkelipohja ja sen
jälkeen täydennetään pohjaan artikkelin tiedot. Käyttöliittymässä on OK -ja
Cancel -painikkeet.
 
\begin{figure}[!h]
  \centering \includegraphics{box.eps}
  \caption{Open-dialogi} \label{dialogi_open}
\end{figure}
 
Kuvassa \ref{Open-kuva} nähdään Java Swing-komponenteilla toteutettu dialogi.

\subsubsection*{Save-dialogi}\label{Save-dialogi} 
 
Tallennetaan käyttäjän kirjoittama artikkeli sellaisenaan vanhan artikkelin
päälle. Tallenuksen eteneminen näytetään käyttöliittymässä tilarivissä, jossa
lukee: tallennetaan. Käyttäjälle annetaan palautetta editorin tilarivissä 
(status bar). Tällöin käyttäja näkee, että järjestelmä suorittaa pyydettyä   
toimenpidettä. Tätä tilarivipalautetta käyttöliittymässä näytetään myös new
ja open -dialogien yhteydessä.
 
\begin{figure}[!h]
  \centering \includegraphics{box.eps}
  \caption{Save-dialogi} \label{dialogi_save}
\end{figure}

Kuvassa \ref{dialogi_save} nähdään Save-dialogi 
Java Swing-komponenteilla toteutettuna.

\subsubsection*{Save As New-dialogi}\label{Save As New-dialogi}
 
Käyttöliittymässä näytetään artikkelin nimi ja kuvaus. Artikkelin nimenä   
käytetään pääotsikkoa. Mikäli käyttäjä on kirjoittanut artikkelille kuvauksen,
tuodaan se liittymään esille, käyttäjä voi tarvittaessa muuttaa kuvausta. 
Artikkelin kuvaus ei ole pakollinen. Tallennus-toiminnon yhteydessä artikkelille
muodostetaan sen id. Käyttöliittymässä on OK -ja Cancel -painikkeet. 
 
\begin{figure}[!h]
  \centering \includegraphics{box.eps}
  \caption{Save-dialogi} \label{dialogi_save_as_new}
\end{figure}
 
Kuvassa \ref{Save As New-kuva} nähdään Save as New-dialogi 
Java Swing-komponenteilla toteutettuna.

\subsubsection*{Tekstidialogi}\label{Tekstidialogi}

Tekstidialogissa näytetään käyttäjälle ohjelman tulosteita ja virheilmoituksia.
Dialogi sisältää tilanteesta riippuvat tekstin ja \emph{OK}-nappulan, jolla
käyttäjä pystyy sulkemaan dialogi-ikkunan.

\begin{figure}[!h]
  \centering \includegraphics{box.eps}
  \caption{Teksti-dialogi} \label{dialogi_teksti}
\end{figure}

Kuvassa \ref{dialogi_teksti} nähdään tekstidialogi esimerkkisyötteellä.

\subsubsection{Dialogien tekninen toteutus}


 
 
 
\subsection{Käyttöliittymän virheilmoitukset (ET)}\label{Käyttöliittymän
virheilmoitukset}
 
Järjestelmä voi antaa käyttäjälle virheilmoituksia. Virheilmoitus kerrotaan   
joko tilarivissä tai erillisessä dialogissa. Tässä kappaleessa kuvataan
järjestelmän virheilmoitukset.
 
\subsubsection{Virheilmoitus tilarivissä}\label{virheilmo_statusbar}
 
Käyttöliittymän alareunassa tilarivillä kerrotaan suorittamatta jätetystä
toimenpiteestä tai suorituksessa olevasta toimenpiteestä. Virheilmoitukset
kerrotaan suoraan järjestelmän virheilmoituksien muodossa. Tilarivi on käyttäjän
kannalta miellyttävämpi kuin erillisessä ikkunassa kerrottava toimenpide.
 
\begin{figure}[!h]
  \centering \includegraphics{box.eps}
  \caption{Save-dialogi} \label{statusbar_virheilmo}
\end{figure}
 
Kuvassa \ref{Tilarivi-kuva} nähdään JouTo-ohjelmiston tilarivi. Kappaleessa
\ref{Statusbar} kuvataan tarkemmin tilarivin toiminta sekä sen tarjoamat metodit.
 
\subsubsection{Virheilmoitus dialogissa}\label{virheilmo_dialogi} 
 
Jos pyydetyn toimenpiteen seurauksena joko tietoja tuhoutuisi tai 
toimenpidettä ei voida muutoin suorittaa, käyttäjälle kerrotaan virheestä 
esiin pomppaavassa erillisessä ikkunassa. Vain vakavissa virhetilanteissa 
käyttäjältä vaaditaan hyväksyntä suorittamatta jätetylle toimenpiteelle. 
Tällainen toimenpide voisi esimerkiksi olla tallennuksen epäonnistuminen.
Käyttöliittymässä pysytään pyydettyä toimenpidettä edeltävään tilaan.
Käyttöliittymässä on vain OK -painike.
 
\begin{figure}[!h]
  \centering \includegraphics{box.eps}
  \caption{Save-dialogi} \label{dialogi_virheilmo}
\end{figure}
 
Kuvassa \ref{dialogi_virheilmo} nähdään Java Swing
-komponenteilla toteutettu esimerkki.


\end{document} 






















