• Hlavní stránka
  • Balíky
  • Třídy
  • Soubory
  • Seznam souborů

BarevnyTextPane.java

Zobrazit dokumentaci tohoto souboru.
00001 /******************************************************************************
00002  * Název projektu: Aplet pro demonstraci Boyerova-Mooreova algoritmu
00003  * Balíček: boyermooredemo
00004  * Soubor: BarevnyTextPane.java
00005  * Datum:  13.4.2008
00006  * Poslední změna: 18.4.2008
00007  * Autor:  Jaroslav Dytrych xdytry00
00008  *
00009  * Popis: Třída pro vytvoření textového panelu, který umožňuje vkládat bloky 
00010  *        textu, u nichž lze nastavit barvu písma a pozadí a zda je písmo tučné.
00011  *             Bloky jsou číslovány dle pořadí vložení do panelu a po jejich
00012  *        vložení je možné měnit barvu písma a pozadí bloku s daným číslem.
00013  *
00014  ******************************************************************************/
00015 
00016 /**
00017  * @file BarevnyTextPane.java
00018  * 
00019  * @brief Třída BarevnyTextPane - textový panel s barevnými bloky textu
00020  */
00021 
00022 package boyermooredemo;
00023 
00024 import java.awt.Color;
00025 import java.util.TreeMap;
00026 import javax.swing.JOptionPane;
00027 import javax.swing.JTextPane;
00028 import javax.swing.text.BadLocationException;
00029 import javax.swing.text.Style;
00030 import javax.swing.text.StyleConstants;
00031 import javax.swing.text.StyledDocument;
00032 
00033 /**
00034  * Třída pro vytvoření textového panelu, který umožňuje vkládat bloky textu, 
00035  * u nichž lze nastavit barvu písma a pozadí a zda je písmo tučné.
00036  *      Bloky jsou číslovány dle pořadí vložení do panelu a po jejich vložení 
00037  * je možné měnit barvu písma a pozadí bloku s daným číslem.
00038  * 
00039  * @brief Textový panel s barevnými bloky textu
00040  */
00041 public class BarevnyTextPane extends JTextPane {
00042   /**
00043    * Třída pro uchování informací o úseku textu
00044    * 
00045    * @brief Třída pro uchování informací o úseku textu
00046    */
00047   class usekTextu
00048   {
00049     /** Začátek úseku textu */
00050     public int zacatek;
00051     /** Délka úseku textu */
00052     public int delka;
00053     /** Barva, se kterou byl úsek textu vložen do panelu */
00054     public Color vychoziBarva;
00055     /** Barva pozadí, se kterou byl úsek textu vložen do panelu */
00056     public Color vychoziBarvaPozadi;
00057     /** Určení, zda je úsek textu vypsán tučným písmem */
00058     public boolean tucne;
00059 
00060     /**
00061      * Konstruktor třídy, uloží informace o úseku
00062      *
00063      * @param zacatekUseku Pozice začátku úseku v dokumentu
00064      * @param delkaUseku Délka úseku
00065      * @param barva Barva úseku
00066      * @param barvaPozadi Barva pozadí úseku
00067      * @param tucneP Určuje, zda je písmo tučné
00068      */
00069     usekTextu(int zacatekUseku, int delkaUseku, Color barva, Color barvaPozadi, 
00070               boolean tucneP)
00071     {
00072       zacatek = zacatekUseku;
00073       delka = delkaUseku;
00074       vychoziBarva = barva;
00075       vychoziBarvaPozadi = barvaPozadi;
00076       tucne = tucneP;
00077     }
00078   }  // class usekTextu
00079   
00080   private StyledDocument dokument;  // dokument v panelu
00081   private int pocetUseku = 0;  // počet úseků textu vypsaných v panelu
00082   private TreeMap<Integer,usekTextu> useky;
00083   
00084   /**
00085    * Konstruktor třídy, vytvoří textový panel a provede inicializaci
00086    */
00087   public BarevnyTextPane() 
00088   {
00089     super();
00090     this.dokument = (StyledDocument)this.getDocument();  // získá dokument
00091     this.useky = new TreeMap<Integer,usekTextu>();  // vytvoří kontejner pro úseky textu
00092     this.pocetUseku = 0;  // zatím není uložen žádný úsek textu
00093   }
00094   
00095   /**
00096    * Metoda pro vyprázdnění panelu
00097    */
00098   public void vyprazdniPanel()
00099   {
00100     try {
00101       this.dokument.remove(0,dokument.getLength());  // vyprázdní dokument
00102     } catch (BadLocationException e) {
00103        JOptionPane.showMessageDialog(this, "Došlo k chybě při úpravě pole s algoritmem.",
00104                                      "Chyba",JOptionPane.ERROR_MESSAGE);
00105     }
00106     this.useky = new TreeMap<Integer,usekTextu>();  // vyprázdní kontejner s informacemi o úsecích
00107     this.pocetUseku = 0;  // počet uložených úseků je nyní 0
00108   }
00109   
00110   /**
00111    * Metoda pro přidání textu do panelu
00112    * 
00113    * @param vkladanyText Vkládaný text
00114    * @param barva Barva textu
00115    * @param barvaPozadi Barva pozadí
00116    * @param tucnePismo Určuje, zda je písmo tučné
00117    */
00118   public void pridejText(String vkladanyText, Color barva, Color barvaPozadi, 
00119                          boolean tucnePismo)
00120   {
00121     // vytvoří stylový objekt
00122     Style styl = this.dokument.addStyle("Styl" + this.pocetUseku, null);
00123     // Nastaví neproporcionální písmo
00124     StyleConstants.setFontFamily(styl, "SansSerif");
00125     // Nastaví velikost písma
00126     StyleConstants.setFontSize(styl, 12);
00127     // Nastaví barvu písma
00128     StyleConstants.setForeground(styl, barva);  
00129     // Nastaví barvu pozadí
00130     StyleConstants.setBackground(styl, barvaPozadi);
00131     if (tucnePismo)
00132     {  // pokud má být písmo tučné, nastaví jej
00133       StyleConstants.setBold(styl, true);
00134     }
00135     
00136     // uloží informace o úseku do kontejneru
00137     this.useky.put(this.pocetUseku,new usekTextu(dokument.getLength(),
00138                    vkladanyText.length(),barva,barvaPozadi,tucnePismo));
00139     this.pocetUseku++;  // byl přidán další úsek
00140        
00141     // Vloží úsek textu do dokumentu
00142     try {
00143       dokument.insertString(dokument.getLength(), vkladanyText, styl);
00144     } catch (BadLocationException e) {
00145       JOptionPane.showMessageDialog(this, "Došlo k chybě při vypisování algoritmu.",
00146                                     "Chyba",JOptionPane.ERROR_MESSAGE);
00147     }
00148   }  // public void pridejText()
00149   
00150   /**
00151    * Metoda pro nastavení barvy úseku textu
00152    *
00153    * @param cisloUseku Číslo úseku textu
00154    * @param barva Nová barva
00155    * @param barvaPozadi Nová barva pozadí
00156    */
00157   public void nastavBarvu(int cisloUseku, Color barva, Color barvaPozadi)
00158   {
00159     // zjistí informace o úseku
00160     usekTextu informace = useky.get(cisloUseku);
00161     
00162     dokument.removeStyle("Styl" + cisloUseku);  // odebere starý styl úseku
00163 
00164     // vytvoří stylový objekt
00165     Style styl = this.dokument.addStyle("Styl" + cisloUseku, null);
00166     // Nastaví neproporcionální písmo
00167     StyleConstants.setFontFamily(styl, "SansSerif");
00168     // Nastaví velikost písma
00169     StyleConstants.setFontSize(styl, 12);
00170     // Nastaví barvu písma
00171     StyleConstants.setForeground(styl, barva);  
00172     // Nastaví barvu pozadí
00173     StyleConstants.setBackground(styl, barvaPozadi);
00174     if (informace.tucne)
00175     {  // pokud má být písmo tučné, nastaví jej
00176       StyleConstants.setBold(styl, true);
00177     }
00178     
00179     // zjistí text úseku, odebere jej z dokumentu a vloží v nové barvě
00180     String textUseku = "";
00181     try {
00182       textUseku = dokument.getText(informace.zacatek,informace.delka);  // zjistí text
00183       dokument.remove(informace.zacatek,informace.delka);  // odebere
00184       dokument.insertString(informace.zacatek, textUseku, styl);  // vloží přebarvený
00185     } catch (BadLocationException e) {
00186        JOptionPane.showMessageDialog(this, "Došlo k chybě při vypisování algoritmu.",
00187                                      "Chyba",JOptionPane.ERROR_MESSAGE);
00188     }
00189   }  // public void nastavBarvu
00190   
00191    /**
00192     * Metoda pro nastavení výchozí barvy úseku textu
00193     * (nastaví úseku tu barvu, se kterou byl vložen do panelu)
00194     *
00195     * @param cisloUseku Číslo úseku textu
00196     */
00197    public void nastavVychoziBarvu(int cisloUseku)
00198    {
00199      // zjistí informace o úseku textu
00200      usekTextu informace = useky.get(cisloUseku);
00201      
00202      dokument.removeStyle("Styl" + cisloUseku);  // odebere starý styl úseku
00203 
00204      // vytvoří stylový objekt
00205      Style styl = this.dokument.addStyle("Styl" + cisloUseku, null);
00206      // Nastaví neproporcionální písmo
00207      StyleConstants.setFontFamily(styl, "SansSerif");
00208      // Nastaví velikost písma
00209      StyleConstants.setFontSize(styl, 12);
00210      // Nastaví barvu písma
00211      StyleConstants.setForeground(styl, informace.vychoziBarva);  
00212      // Nastaví barvu pozadí
00213      StyleConstants.setBackground(styl, informace.vychoziBarvaPozadi);
00214      if (informace.tucne)
00215      {  // pokud má být písmo tučné, nastaví jej
00216        StyleConstants.setBold(styl, true);
00217      }
00218      
00219      // zjistí text úseku, odebere jej z dokumentu a vloží v nové barvě
00220      String textUseku = "";
00221      try {
00222        textUseku = dokument.getText(informace.zacatek,informace.delka);  // zjistí text
00223        dokument.remove(informace.zacatek,informace.delka);  // odebere
00224        dokument.insertString(informace.zacatek, textUseku, styl);  // vloží přebarvený
00225      } catch (BadLocationException e) {
00226         JOptionPane.showMessageDialog(this, "Došlo k chybě při vypisování algoritmu.",
00227                                       "Chyba",JOptionPane.ERROR_MESSAGE);
00228      }
00229    }  // public void nastavBarvu
00230   
00231 }  // public class barevnyTextPane
00232 
00233 /*** Konec souboru BarevnyTextPane.java ***/

Generováno čt 3. bře 2011 13.55:32 pro projekt Aplet pro demonstraci Boyerova-Mooreova algoritmu - programem  doxygen 1.7.1