- 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 ***/