root/java/SuperPostak/src/cz/frantovo/superPostak/SuperPostak.java @ 3:03d27d3b3f7b

Revision 3:03d27d3b3f7b, 65.6 KB (checked in by František Kučera <franta-hg@…>, 15 years ago)

Drobnosti a Substance LaF

Line 
1package cz.frantovo.superPostak;
2
3import cz.frantovo.postak.HromadnaZprava;
4import cz.frantovo.postak.InternetAddressKomu;
5import cz.frantovo.postak.Nastaveni;
6import cz.frantovo.postak.Postak;
7import java.awt.CardLayout;
8import java.awt.Component;
9import java.awt.Cursor;
10import java.awt.Dialog.ModalityType;
11import java.awt.KeyboardFocusManager;
12import java.beans.XMLDecoder;
13import java.beans.XMLEncoder;
14import java.io.BufferedInputStream;
15import java.io.BufferedOutputStream;
16import java.io.File;
17import java.io.FileInputStream;
18import java.io.FileNotFoundException;
19import java.io.FileOutputStream;
20import java.io.IOException;
21import java.io.UnsupportedEncodingException;
22import java.sql.SQLException;
23import java.util.ArrayList;
24import java.util.Collection;
25import java.util.logging.Level;
26import java.util.logging.Logger;
27import java.util.zip.GZIPInputStream;
28import java.util.zip.GZIPOutputStream;
29import javax.mail.MessagingException;
30import javax.mail.internet.InternetAddress;
31import javax.swing.JComponent;
32import javax.swing.JDialog;
33import javax.swing.JOptionPane;
34import javax.swing.JTextArea;
35import javax.swing.UIManager;
36import javax.swing.UnsupportedLookAndFeelException;
37import org.jdesktop.swingx.JXErrorPane;
38import org.jdesktop.swingx.JXTaskPaneContainer;
39import org.jdesktop.swingx.error.ErrorInfo;
40
41/**
42 *
43 * @author  fiki
44 */
45public class SuperPostak extends javax.swing.JFrame {
46
47    /** Soubor, kde je uložené nastavení */
48    private static final String NASTAVENI_SOUBOR = "Nastaveni.xml.gz";
49    private static final String CERTIFIKATY_SOUBOR = "DuveryhodneCertifikaty.keystore";
50    private static final String NASTAVENI_SLOZKA = ".SuperPostak";
51    private static final String DOMACI_ADRESAR = System.getProperty("user.home");
52    private static Logger log = Logger.getLogger(SuperPostak.class.getName());
53    private static final long serialVersionUID = -7026850569575604048L;
54    private Nastaveni nastaveni = new Nastaveni();
55    private Postak postak = new Postak(nastaveni);
56
57    /**
58     * Creates new form SuperPostak
59     * @param ladit předvyplní testovací hodnoty - zprávu
60     * @param exit při zavření okna ukončí program     
61     */
62    public SuperPostak(boolean ladit, boolean exit) {
63        log.log(Level.WARNING, "Program byl spuštěn.");
64        nactiOvladaceJDBC();
65        vytvorSlozkuProgramu();
66        initComponents();
67
68        nactiNastaveni();
69        ulozNastaveni();
70        nastaveni.setCestaKCertifikatum(getCestaKCertifikatum());
71
72        inicializujCardLayout();
73        setLocationRelativeTo(null);
74
75        /** Vyřešíme problém TAB vs. Focus */
76        vyresitTabFocusProblem(vstupSQL);
77        vyresitTabFocusProblem(vstupZprava);
78
79        /** Ladicí hodnoty */
80        if (ladit) {
81            nastavLadiciHodnoty();
82        }
83
84        if (exit) {
85            setDefaultCloseOperation(EXIT_ON_CLOSE);
86        }
87
88
89    }
90
91    private void inicializujCardLayout() {
92        panelDatabaze.setName("panelDatabaze");
93        panelOdeslat.setName("panelOdeslat");
94        panelPrijemci.setName("panelPrijemci");
95        panelServer.setName("panelServer");
96        panelVychoziPrijemci.setName("panelVychoziPrijemci");
97        panelZprava.setName("panelZprava");
98
99        panel.add(panelDatabaze, panelDatabaze.getName());
100        panel.add(panelOdeslat, panelOdeslat.getName());
101        panel.add(panelPrijemci, panelPrijemci.getName());
102        panel.add(panelServer, panelServer.getName());
103        panel.add(panelVychoziPrijemci, panelVychoziPrijemci.getName());
104        panel.add(panelZprava, panelZprava.getName());
105
106        setPanel(panelZprava);
107        pack();
108    }
109
110    /**
111     * Vyplní formuláře (odesílatel, předmět, zpráva, příjemci...) výchozími hodnotami,
112     * aby se dal program testovat jedním kliknutím.
113     */
114    private void nastavLadiciHodnoty() {
115        try {
116            vstupAdresaOdesilatele.setText("SuperPostak@frantovo.cz");
117            vstupJmenoOdesilatele.setText("SuperPošťák");
118            vstupPredmet.setText("Zkušební zpráva od SuperPošťáka");
119            vstupZprava.setText("Toto je obyčejná zkušební zpráva v češtině :-)");
120            ArrayList<InternetAddressKomu> adresy = new ArrayList<InternetAddressKomu>();
121            adresy.add(new InternetAddressKomu("SuperPostak@frantovo.cz", "SuperPošťák"));
122            prijemciZkusebni.setAdresy(adresy);
123        } catch (UnsupportedEncodingException e) {
124            log.log(Level.SEVERE, null, e);
125        }
126    }
127
128    /**
129     * Pokusíme se načíst ovladače pro různé DB a výsledek zapíšeme do logu.
130     * Další ovladače je možné přidat pomocí manifestu v příslušných knihovnách.
131     * viz http://www.sweb.cz/pichlik/archive/2006_08_06_archive.html#115502885631518161
132     */
133    private void nactiOvladaceJDBC() {
134        nactiOvladacJDBC("org.postgresql.Driver", "PostgreSQL");
135        nactiOvladacJDBC("com.mysql.jdbc.Driver", "MySQL");
136        nactiOvladacJDBC("net.sourceforge.jtds.jdbc.Driver", "jTDS Sybase a MS SQL");
137        nactiOvladacJDBC("com.sybase.jdbc2.jdbc.SybDriver", "Sybase.com");
138    }
139
140    /**
141     * @param trida ovladač databáze, který se má načíst
142     * @param jmeno název databáze     
143     */
144    private void nactiOvladacJDBC(String trida, String jmeno) {
145        try {
146            Class.forName(trida);
147            log.log(Level.INFO, "JDBC ovladač pro " + jmeno + " byl úspěšně načten.");
148        } catch (ClassNotFoundException e) {
149            log.log(Level.INFO, "JDBC ovladač pro " + jmeno + " se nepodařilo načíst.");
150        }
151    }
152
153    /** Vrací plnou cestu k souboru s nastavením */
154    protected static String getCestaKCertifikatum() {
155        return getCestaKeSlozceProgramu() + CERTIFIKATY_SOUBOR;
156    }
157
158    /** Vrací plnou cestu k souboru s nastavením */
159    protected static String getCestaKNastaveni() {
160        return getCestaKeSlozceProgramu() + NASTAVENI_SOUBOR;
161    }
162
163    /** Vrací plnou cestu ke složce programu (nastavení, certifikáty a logy) */
164    protected static String getCestaKeSlozceProgramu() {
165        return DOMACI_ADRESAR + File.separator + NASTAVENI_SLOZKA + File.separator;
166    }
167
168    /** Načte nastavení ze souboru */
169    private void nactiNastaveni() {
170        try {
171            XMLDecoder d = new XMLDecoder(new BufferedInputStream(new GZIPInputStream(new FileInputStream(getCestaKNastaveni()))));
172            Object xmlObjekt = d.readObject();
173            d.close();
174
175            if (xmlObjekt instanceof Nastaveni) {
176                nastaveni = (Nastaveni) xmlObjekt;
177            } else {
178                nastaveni = new Nastaveni();
179                log.log(Level.SEVERE, "Nepodařilo se načíst nastavení: není instancí");
180            }
181
182            nactiNastaveniGUI();
183
184            log.log(Level.INFO, "Nastavení bylo načteno.");
185        } catch (FileNotFoundException ex) {
186            log.log(Level.SEVERE, "Nepodařilo se načíst nastavení: soubor nenalezen", ex);
187        } catch (IOException ex) {
188            log.log(Level.SEVERE, "Nastavení se nepodařilo načíst: I/O.", ex);
189        }
190    }
191
192    /** Vytvoří (pokud neexistuje) v domovském adresáři složku, kam se ukládá nastavení a případně logy */
193    private static boolean vytvorSlozkuProgramu() {
194        if (new File(getCestaKeSlozceProgramu()).mkdirs()) {
195            log.log(Level.INFO, "Složka pro nastavení programu byla vytvořena: " + getCestaKeSlozceProgramu());
196            return true;
197        } else {
198            return false;
199        }
200    }
201
202    /** Uloží nastavení do souboru */
203    private void ulozNastaveni() {
204        try {
205            ulozNastaveniGUI();
206
207            vytvorSlozkuProgramu();
208
209            XMLEncoder e = new XMLEncoder(new BufferedOutputStream(new GZIPOutputStream(new FileOutputStream(getCestaKNastaveni()))));
210            e.writeObject(nastaveni);
211            e.close();
212            log.log(Level.INFO, "Nastavení bylo uloženo.");
213        } catch (FileNotFoundException ex) {
214            log.log(Level.SEVERE, "Nastavení se nepodařilo uložit: soubor nenalezen.", ex);
215        } catch (IOException ex) {
216            log.log(Level.SEVERE, "Nastavení se nepodařilo uložit: I/O.", ex);
217        }
218    }
219
220    /** Posbírá zadané hodnoty z GUI a uloží je do objektu nastaveni */
221    private void ulozNastaveniGUI() {
222        nastaveni.setDatabaze(vstupDatabaze.getText());
223        nastaveni.setDbHeslo(vstupDBheslo.getPassword());
224        nastaveni.setDbJmeno(vstupDBjmeno.getText());
225        nastaveni.setLimitZprav((Integer) vstupSMTPlimitPrijemcu.getValue());
226        nastaveni.setPostovniHeslo(vstupSMTPheslo.getPassword());
227        nastaveni.setPostovniJmeno(vstupSMTPjmeno.getText());
228        nastaveni.setPostovniPort((Integer) vstupSMTPport.getValue());
229        nastaveni.setPostovniServer(vstupSMTPserver.getText());
230        nastaveni.setVychoziPrijemci(prijemciVychozi.getAdresy());
231    }
232
233    /** Aktualizuje GUI formuláře hodnotami z objektu nastaveni */
234    private void nactiNastaveniGUI() {
235        vstupDatabaze.setText(nastaveni.getDatabaze());
236        if (nastaveni.getDbHeslo() != null) {
237            vstupDBheslo.setText(String.valueOf(nastaveni.getDbHeslo()));
238        }
239        vstupDBjmeno.setText(nastaveni.getDbJmeno());
240        vstupSMTPlimitPrijemcu.setValue(nastaveni.getLimitZprav());
241        if (nastaveni.getPostovniHeslo() != null) {
242            vstupSMTPheslo.setText(String.valueOf(nastaveni.getPostovniHeslo()));
243        }
244        vstupSMTPjmeno.setText(nastaveni.getPostovniJmeno());
245        vstupSMTPport.setValue(nastaveni.getPostovniPort());
246        vstupSMTPserver.setText(nastaveni.getPostovniServer());
247        prijemciVychozi.setAdresy(nastaveni.getVychoziPrijemci());
248    }
249
250    protected static void zobrazChybovyDialog(Component vlastnik, String strucnaZprava, Throwable vyjimka, Level zavaznost, boolean logovat) {
251        zobrazChybovyDialog(vlastnik, "Chyba", strucnaZprava, null, vyjimka, zavaznost, logovat);
252    }
253
254    protected static void zobrazInformacniDialog(Component vlastnik, String nadpis, String text, boolean loguj) {
255        JOptionPane.showMessageDialog(vlastnik, text, nadpis, JOptionPane.INFORMATION_MESSAGE);
256        if (loguj) {
257            log.log(Level.INFO, nadpis + ": " + text);
258        }
259    }
260
261    protected static void zobrazChybovyDialog(Component vlastnik, String nadpis, String strucnaZprava, String podrobnaZprava, Throwable vyjimka, Level zavaznost, boolean logovat) {
262        if (logovat) {
263            log.log(zavaznost, strucnaZprava, vyjimka);
264        }
265
266        JXErrorPane chybovyPanel = new JXErrorPane();
267        ErrorInfo chybovaInformace = new ErrorInfo(nadpis, strucnaZprava, podrobnaZprava, null, vyjimka, zavaznost, null);
268        chybovyPanel.setErrorInfo(chybovaInformace);
269        JDialog dialog = JXErrorPane.createDialog(vlastnik, chybovyPanel);
270        dialog.setVisible(true);
271    }
272
273    private void zobrazChybovyDialog(String strucnaZprava, Throwable vyjimka, Level zavaznost, boolean logovat) {
274        zobrazChybovyDialog(this, strucnaZprava, vyjimka, zavaznost, logovat);
275    }
276
277    private void zobrazInformacniDialog(String nadpis, String text, boolean loguj) {
278        zobrazInformacniDialog(this, nadpis, text, loguj);
279    }
280
281    private void zobrazChybovyDialog(String nadpis, String strucnaZprava, String podrobnaZprava, Throwable vyjimka, Level zavaznost, boolean logovat) {
282        zobrazChybovyDialog(this, nadpis, strucnaZprava, podrobnaZprava, vyjimka, zavaznost, logovat);
283    }
284
285    /** This method is called from within the constructor to
286     * initialize the form.
287     * WARNING: Do NOT modify this code. The content of this method is
288     * always regenerated by the Form Editor.
289     */
290    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
291    private void initComponents() {
292
293        panelDatabaze = new org.jdesktop.swingx.JXPanel();
294        jLabel9 = new javax.swing.JLabel();
295        vstupDatabaze = new javax.swing.JTextField();
296        jLabel10 = new javax.swing.JLabel();
297        vstupDBjmeno = new javax.swing.JTextField();
298        vstupDBheslo = new javax.swing.JPasswordField();
299        jLabel11 = new javax.swing.JLabel();
300        vyzkousetPripojeniTlacitko = new javax.swing.JButton();
301        vystupDBzprava = new javax.swing.JLabel();
302        panelOdeslat = new org.jdesktop.swingx.JXPanel();
303        jPanel1 = new javax.swing.JPanel();
304        rozeslatZkusebniTlacitko = new javax.swing.JButton();
305        rozeslatHromadnouZpravuTlacitko = new javax.swing.JButton();
306        zobrazitVsechnyPrijemceTlacitko = new javax.swing.JButton();
307        prijemciZkusebni = new cz.frantovo.superPostak.PanelPrijemcu();
308        jSeparator2 = new javax.swing.JSeparator();
309        jLabel14 = new javax.swing.JLabel();
310        panelPrijemci = new org.jdesktop.swingx.JXPanel();
311        jLabel13 = new javax.swing.JLabel();
312        jScrollPane3 = new javax.swing.JScrollPane();
313        vstupSQL = new javax.swing.JTextArea();
314        vyzkousetSQLTlacitko = new javax.swing.JButton();
315        vystupSQLZprava = new javax.swing.JLabel();
316        prijemciDodatecni = new cz.frantovo.superPostak.PanelPrijemcu();
317        jSeparator1 = new javax.swing.JSeparator();
318        jLabel16 = new javax.swing.JLabel();
319        zobrazitSQLPrijemceTlacitko = new javax.swing.JButton();
320        panelServer = new org.jdesktop.swingx.JXPanel();
321        jLabel4 = new javax.swing.JLabel();
322        jLabel5 = new javax.swing.JLabel();
323        vstupSMTPserver = new javax.swing.JTextField();
324        vstupSMTPport = new javax.swing.JSpinner();
325        napovedaSMTPscroll = new javax.swing.JScrollPane();
326        napovedaSMTP = new javax.swing.JTextArea();
327        jLabel6 = new javax.swing.JLabel();
328        vstupSMTPjmeno = new javax.swing.JTextField();
329        vstupSMTPheslo = new javax.swing.JPasswordField();
330        jLabel7 = new javax.swing.JLabel();
331        vstupSMTPlimitPrijemcu = new javax.swing.JSpinner();
332        jLabel8 = new javax.swing.JLabel();
333        panelVychoziPrijemci = new org.jdesktop.swingx.JXPanel();
334        prijemciVychozi = new cz.frantovo.superPostak.PanelPrijemcu();
335        jLabel12 = new javax.swing.JLabel();
336        panelZprava = new org.jdesktop.swingx.JXPanel();
337        jLabel1 = new javax.swing.JLabel();
338        vstupPredmet = new javax.swing.JTextField();
339        jLabel2 = new javax.swing.JLabel();
340        vstupJmenoOdesilatele = new javax.swing.JTextField();
341        vstupAdresaOdesilatele = new javax.swing.JTextField();
342        jScrollPane1 = new javax.swing.JScrollPane();
343        vstupZprava = new javax.swing.JTextArea();
344        jLabel15 = new javax.swing.JLabel();
345        vstupFormatHTML = new javax.swing.JCheckBox();
346        odpovedetKomuOdkaz = new org.jdesktop.swingx.JXHyperlink();
347        odpovedetKomuDialog = new javax.swing.JDialog();
348        jLabel18 = new javax.swing.JLabel();
349        jLabel19 = new javax.swing.JLabel();
350        jLabel17 = new javax.swing.JLabel();
351        odpovedetKomuJmeno = new javax.swing.JTextField();
352        odpovedetKomuAdresa = new javax.swing.JTextField();
353        odpovedetKomuHotovo = new javax.swing.JButton();
354        jXHeader1 = new org.jdesktop.swingx.JXHeader();
355        taskPanel = new org.jdesktop.swingx.JXTaskPaneContainer();
356        jXTaskPane1 = new org.jdesktop.swingx.JXTaskPane();
357        lnText = new org.jdesktop.swingx.JXHyperlink();
358        lnPrijemci = new org.jdesktop.swingx.JXHyperlink();
359        lnOdeslat = new org.jdesktop.swingx.JXHyperlink();
360        jXTaskPane2 = new org.jdesktop.swingx.JXTaskPane();
361        lnServer = new org.jdesktop.swingx.JXHyperlink();
362        lnDatabaze = new org.jdesktop.swingx.JXHyperlink();
363        lnVychoziPrijemci = new org.jdesktop.swingx.JXHyperlink();
364        panel = new org.jdesktop.swingx.JXPanel();
365
366        jLabel9.setText("Databáze");
367
368        jLabel10.setText("Jméno");
369
370        jLabel11.setText("Heslo");
371
372        vyzkousetPripojeniTlacitko.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/fork.png"))); // NOI18N
373        vyzkousetPripojeniTlacitko.setMnemonic('y');
374        vyzkousetPripojeniTlacitko.setText("Vyzkoušet spojení");
375        vyzkousetPripojeniTlacitko.addActionListener(new java.awt.event.ActionListener() {
376            public void actionPerformed(java.awt.event.ActionEvent evt) {
377                vyzkousetPripojeniTlacitkoActionPerformed(evt);
378            }
379        });
380
381        vystupDBzprava.setText(" ");
382
383        javax.swing.GroupLayout panelDatabazeLayout = new javax.swing.GroupLayout(panelDatabaze);
384        panelDatabaze.setLayout(panelDatabazeLayout);
385        panelDatabazeLayout.setHorizontalGroup(
386            panelDatabazeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
387            .addGroup(panelDatabazeLayout.createSequentialGroup()
388                .addContainerGap()
389                .addGroup(panelDatabazeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
390                    .addGroup(panelDatabazeLayout.createSequentialGroup()
391                        .addGroup(panelDatabazeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
392                            .addComponent(jLabel9)
393                            .addComponent(jLabel10)
394                            .addComponent(jLabel11))
395                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
396                        .addGroup(panelDatabazeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
397                            .addComponent(vstupDatabaze, javax.swing.GroupLayout.DEFAULT_SIZE, 257, Short.MAX_VALUE)
398                            .addComponent(vstupDBjmeno, javax.swing.GroupLayout.DEFAULT_SIZE, 257, Short.MAX_VALUE)
399                            .addGroup(panelDatabazeLayout.createSequentialGroup()
400                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
401                                .addComponent(vstupDBheslo, javax.swing.GroupLayout.DEFAULT_SIZE, 257, Short.MAX_VALUE))))
402                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelDatabazeLayout.createSequentialGroup()
403                        .addComponent(vystupDBzprava, javax.swing.GroupLayout.DEFAULT_SIZE, 155, Short.MAX_VALUE)
404                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
405                        .addComponent(vyzkousetPripojeniTlacitko)))
406                .addContainerGap())
407        );
408        panelDatabazeLayout.setVerticalGroup(
409            panelDatabazeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
410            .addGroup(panelDatabazeLayout.createSequentialGroup()
411                .addContainerGap()
412                .addGroup(panelDatabazeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
413                    .addComponent(jLabel9)
414                    .addComponent(vstupDatabaze, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
415                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
416                .addGroup(panelDatabazeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
417                    .addComponent(jLabel10)
418                    .addComponent(vstupDBjmeno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
419                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
420                .addGroup(panelDatabazeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
421                    .addComponent(jLabel11)
422                    .addComponent(vstupDBheslo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
423                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
424                .addGroup(panelDatabazeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
425                    .addComponent(vyzkousetPripojeniTlacitko)
426                    .addComponent(vystupDBzprava))
427                .addContainerGap(183, Short.MAX_VALUE))
428        );
429
430        rozeslatZkusebniTlacitko.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/apply.png"))); // NOI18N
431        rozeslatZkusebniTlacitko.setMnemonic('u');
432        rozeslatZkusebniTlacitko.setText("Rozeslat zkušební");
433        rozeslatZkusebniTlacitko.addActionListener(new java.awt.event.ActionListener() {
434            public void actionPerformed(java.awt.event.ActionEvent evt) {
435                rozeslatZkusebniTlacitkoActionPerformed(evt);
436            }
437        });
438
439        rozeslatHromadnouZpravuTlacitko.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/adept_commit.png"))); // NOI18N
440        rozeslatHromadnouZpravuTlacitko.setMnemonic('h');
441        rozeslatHromadnouZpravuTlacitko.setText("Rozeslat hromadnou zprávu");
442        rozeslatHromadnouZpravuTlacitko.addActionListener(new java.awt.event.ActionListener() {
443            public void actionPerformed(java.awt.event.ActionEvent evt) {
444                rozeslatHromadnouZpravuTlacitkoActionPerformed(evt);
445            }
446        });
447
448        zobrazitVsechnyPrijemceTlacitko.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/zobrazit_adresy.png"))); // NOI18N
449        zobrazitVsechnyPrijemceTlacitko.setToolTipText("<html>\nZobrazí seznam všech příjemcům, kterým bude odeslána zpráva.<br/>\n(Při velkých počtech záznamů může být tato operace náročná.)\n</html>");
450        zobrazitVsechnyPrijemceTlacitko.addActionListener(new java.awt.event.ActionListener() {
451            public void actionPerformed(java.awt.event.ActionEvent evt) {
452                zobrazitVsechnyPrijemceTlacitkoActionPerformed(evt);
453            }
454        });
455
456        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
457        jPanel1.setLayout(jPanel1Layout);
458        jPanel1Layout.setHorizontalGroup(
459            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
460            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
461                .addContainerGap(106, Short.MAX_VALUE)
462                .addComponent(rozeslatZkusebniTlacitko)
463                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
464                .addComponent(rozeslatHromadnouZpravuTlacitko)
465                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
466                .addComponent(zobrazitVsechnyPrijemceTlacitko)
467                .addContainerGap())
468        );
469        jPanel1Layout.setVerticalGroup(
470            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
471            .addGroup(jPanel1Layout.createSequentialGroup()
472                .addContainerGap()
473                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
474                    .addComponent(rozeslatHromadnouZpravuTlacitko)
475                    .addComponent(zobrazitVsechnyPrijemceTlacitko)
476                    .addComponent(rozeslatZkusebniTlacitko))
477                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
478        );
479
480        jLabel14.setText("Zkušební příjemci");
481
482        javax.swing.GroupLayout panelOdeslatLayout = new javax.swing.GroupLayout(panelOdeslat);
483        panelOdeslat.setLayout(panelOdeslatLayout);
484        panelOdeslatLayout.setHorizontalGroup(
485            panelOdeslatLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
486            .addGroup(panelOdeslatLayout.createSequentialGroup()
487                .addContainerGap()
488                .addGroup(panelOdeslatLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
489                    .addComponent(prijemciZkusebni, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 535, Short.MAX_VALUE)
490                    .addComponent(jSeparator2, javax.swing.GroupLayout.DEFAULT_SIZE, 535, Short.MAX_VALUE)
491                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
492                    .addComponent(jLabel14))
493                .addContainerGap())
494        );
495        panelOdeslatLayout.setVerticalGroup(
496            panelOdeslatLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
497            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelOdeslatLayout.createSequentialGroup()
498                .addContainerGap()
499                .addComponent(jLabel14)
500                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
501                .addComponent(prijemciZkusebni, javax.swing.GroupLayout.DEFAULT_SIZE, 153, Short.MAX_VALUE)
502                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
503                .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
504                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
505                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
506                .addContainerGap())
507        );
508
509        jLabel13.setText("SQL dotaz");
510
511        vstupSQL.setColumns(20);
512        vstupSQL.setRows(5);
513        jScrollPane3.setViewportView(vstupSQL);
514
515        vyzkousetSQLTlacitko.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/fork.png"))); // NOI18N
516        vyzkousetSQLTlacitko.setMnemonic('y');
517        vyzkousetSQLTlacitko.setText("Vyzkoušet");
518        vyzkousetSQLTlacitko.addActionListener(new java.awt.event.ActionListener() {
519            public void actionPerformed(java.awt.event.ActionEvent evt) {
520                vyzkousetSQLTlacitkoActionPerformed(evt);
521            }
522        });
523
524        vystupSQLZprava.setText(" ");
525
526        prijemciDodatecni.setToolTipText("Zde můžete dopnit další přijemce.");
527
528        jLabel16.setText("Dodateční příjemci:");
529
530        zobrazitSQLPrijemceTlacitko.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/zobrazit_adresy.png"))); // NOI18N
531        zobrazitSQLPrijemceTlacitko.setToolTipText("<html>\nZobrazí seznam adres načtených z databáze.<br/>\n(Při velkých počtech záznamů může být tato operace náročná.)\n</html>");
532        zobrazitSQLPrijemceTlacitko.addActionListener(new java.awt.event.ActionListener() {
533            public void actionPerformed(java.awt.event.ActionEvent evt) {
534                zobrazitSQLPrijemceTlacitkoActionPerformed(evt);
535            }
536        });
537
538        javax.swing.GroupLayout panelPrijemciLayout = new javax.swing.GroupLayout(panelPrijemci);
539        panelPrijemci.setLayout(panelPrijemciLayout);
540        panelPrijemciLayout.setHorizontalGroup(
541            panelPrijemciLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
542            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelPrijemciLayout.createSequentialGroup()
543                .addContainerGap()
544                .addGroup(panelPrijemciLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
545                    .addComponent(prijemciDodatecni, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 344, Short.MAX_VALUE)
546                    .addComponent(jSeparator1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 344, Short.MAX_VALUE)
547                    .addComponent(jScrollPane3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 344, Short.MAX_VALUE)
548                    .addComponent(jLabel13, javax.swing.GroupLayout.Alignment.LEADING)
549                    .addGroup(panelPrijemciLayout.createSequentialGroup()
550                        .addComponent(vystupSQLZprava, javax.swing.GroupLayout.DEFAULT_SIZE, 52, Short.MAX_VALUE)
551                        .addGap(127, 127, 127)
552                        .addComponent(vyzkousetSQLTlacitko)
553                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
554                        .addComponent(zobrazitSQLPrijemceTlacitko))
555                    .addComponent(jLabel16, javax.swing.GroupLayout.Alignment.LEADING))
556                .addContainerGap())
557        );
558        panelPrijemciLayout.setVerticalGroup(
559            panelPrijemciLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
560            .addGroup(panelPrijemciLayout.createSequentialGroup()
561                .addContainerGap()
562                .addComponent(jLabel13)
563                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
564                .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
565                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
566                .addGroup(panelPrijemciLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
567                    .addComponent(vystupSQLZprava, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
568                    .addComponent(zobrazitSQLPrijemceTlacitko)
569                    .addComponent(vyzkousetSQLTlacitko))
570                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
571                .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
572                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
573                .addComponent(jLabel16)
574                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
575                .addComponent(prijemciDodatecni, javax.swing.GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE)
576                .addContainerGap())
577        );
578
579        jLabel4.setText("SMTP server");
580
581        jLabel5.setText("Port");
582
583        vstupSMTPserver.setText("localhost");
584
585        vstupSMTPport.setValue(25);
586
587        napovedaSMTP.setColumns(20);
588        napovedaSMTP.setEditable(false);
589        napovedaSMTP.setLineWrap(true);
590        napovedaSMTP.setRows(5);
591        napovedaSMTP.setText("Tip: některé SMTP servery mají omezený seznam počítačů, ze kterých přijímají poštu");
592        napovedaSMTP.setWrapStyleWord(true);
593        napovedaSMTPscroll.setViewportView(napovedaSMTP);
594
595        jLabel6.setText("Jméno");
596
597        jLabel7.setText("Heslo");
598
599        vstupSMTPlimitPrijemcu.setValue(1000);
600
601        jLabel8.setText("Limit příjemců");
602
603        javax.swing.GroupLayout panelServerLayout = new javax.swing.GroupLayout(panelServer);
604        panelServer.setLayout(panelServerLayout);
605        panelServerLayout.setHorizontalGroup(
606            panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
607            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelServerLayout.createSequentialGroup()
608                .addContainerGap()
609                .addGroup(panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
610                    .addComponent(napovedaSMTPscroll, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 318, Short.MAX_VALUE)
611                    .addGroup(panelServerLayout.createSequentialGroup()
612                        .addGroup(panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
613                            .addComponent(jLabel4)
614                            .addComponent(jLabel6)
615                            .addComponent(jLabel5)
616                            .addComponent(jLabel7)
617                            .addComponent(jLabel8))
618                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
619                        .addGroup(panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
620                            .addComponent(vstupSMTPserver, javax.swing.GroupLayout.DEFAULT_SIZE, 230, Short.MAX_VALUE)
621                            .addComponent(vstupSMTPport, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 230, Short.MAX_VALUE)
622                            .addComponent(vstupSMTPjmeno, javax.swing.GroupLayout.DEFAULT_SIZE, 230, Short.MAX_VALUE)
623                            .addComponent(vstupSMTPheslo, javax.swing.GroupLayout.DEFAULT_SIZE, 230, Short.MAX_VALUE)
624                            .addComponent(vstupSMTPlimitPrijemcu, javax.swing.GroupLayout.DEFAULT_SIZE, 230, Short.MAX_VALUE))))
625                .addContainerGap())
626        );
627        panelServerLayout.setVerticalGroup(
628            panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
629            .addGroup(panelServerLayout.createSequentialGroup()
630                .addContainerGap()
631                .addGroup(panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
632                    .addComponent(jLabel4)
633                    .addComponent(vstupSMTPserver, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
634                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
635                .addGroup(panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
636                    .addComponent(vstupSMTPport, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
637                    .addComponent(jLabel5))
638                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
639                .addGroup(panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
640                    .addComponent(jLabel6)
641                    .addComponent(vstupSMTPjmeno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
642                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
643                .addGroup(panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
644                    .addComponent(vstupSMTPheslo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
645                    .addComponent(jLabel7))
646                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
647                .addGroup(panelServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
648                    .addComponent(vstupSMTPlimitPrijemcu, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
649                    .addComponent(jLabel8))
650                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
651                .addComponent(napovedaSMTPscroll, javax.swing.GroupLayout.DEFAULT_SIZE, 145, Short.MAX_VALUE)
652                .addContainerGap())
653        );
654
655        jLabel12.setText("Těmto lidem přijde hromadný e-mail vždy (netýká se zkušebního rozeslání zprávy).");
656
657        javax.swing.GroupLayout panelVychoziPrijemciLayout = new javax.swing.GroupLayout(panelVychoziPrijemci);
658        panelVychoziPrijemci.setLayout(panelVychoziPrijemciLayout);
659        panelVychoziPrijemciLayout.setHorizontalGroup(
660            panelVychoziPrijemciLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
661            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelVychoziPrijemciLayout.createSequentialGroup()
662                .addContainerGap()
663                .addGroup(panelVychoziPrijemciLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
664                    .addComponent(prijemciVychozi, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE)
665                    .addComponent(jLabel12, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE))
666                .addContainerGap())
667        );
668        panelVychoziPrijemciLayout.setVerticalGroup(
669            panelVychoziPrijemciLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
670            .addGroup(panelVychoziPrijemciLayout.createSequentialGroup()
671                .addContainerGap()
672                .addComponent(jLabel12)
673                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
674                .addComponent(prijemciVychozi, javax.swing.GroupLayout.DEFAULT_SIZE, 261, Short.MAX_VALUE)
675                .addContainerGap())
676        );
677
678        jLabel1.setLabelFor(vstupPredmet);
679        jLabel1.setText("Předmět");
680
681        vstupPredmet.addActionListener(new java.awt.event.ActionListener() {
682            public void actionPerformed(java.awt.event.ActionEvent evt) {
683                vstupPredmetActionPerformed(evt);
684            }
685        });
686
687        jLabel2.setText("Jméno odesílatele");
688
689        vstupZprava.setColumns(20);
690        vstupZprava.setRows(5);
691        jScrollPane1.setViewportView(vstupZprava);
692
693        jLabel15.setText("Formát zprávy");
694
695        vstupFormatHTML.setMnemonic('h');
696        vstupFormatHTML.setText("HTML");
697        vstupFormatHTML.setToolTipText("Při nezaškrtnutí se odešle jako prostý text");
698
699        odpovedetKomuOdkaz.setForeground(javax.swing.UIManager.getDefaults().getColor("windowText"));
700        odpovedetKomuOdkaz.setMnemonic('e');
701        odpovedetKomuOdkaz.setText("Adresa odesílatele");
702        odpovedetKomuOdkaz.setToolTipText("<html><p>Klikněte sem pro nastavení adresy,</p><p>na kterou mají chodit odpovědi</p></html>");
703        odpovedetKomuOdkaz.setClickedColor(javax.swing.UIManager.getDefaults().getColor("windowText"));
704        odpovedetKomuOdkaz.setUnclickedColor(javax.swing.UIManager.getDefaults().getColor("windowText"));
705        odpovedetKomuOdkaz.addActionListener(new java.awt.event.ActionListener() {
706            public void actionPerformed(java.awt.event.ActionEvent evt) {
707                odpovedetKomuOdkazActionPerformed(evt);
708            }
709        });
710
711        javax.swing.GroupLayout panelZpravaLayout = new javax.swing.GroupLayout(panelZprava);
712        panelZprava.setLayout(panelZpravaLayout);
713        panelZpravaLayout.setHorizontalGroup(
714            panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
715            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelZpravaLayout.createSequentialGroup()
716                .addContainerGap()
717                .addGroup(panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
718                    .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 438, Short.MAX_VALUE)
719                    .addGroup(panelZpravaLayout.createSequentialGroup()
720                        .addGroup(panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
721                            .addGroup(panelZpravaLayout.createSequentialGroup()
722                                .addGroup(panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
723                                    .addComponent(jLabel2)
724                                    .addComponent(jLabel1))
725                                .addGap(17, 17, 17))
726                            .addGroup(panelZpravaLayout.createSequentialGroup()
727                                .addComponent(odpovedetKomuOdkaz, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
728                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)))
729                        .addGroup(panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
730                            .addComponent(vstupJmenoOdesilatele, javax.swing.GroupLayout.DEFAULT_SIZE, 328, Short.MAX_VALUE)
731                            .addComponent(vstupAdresaOdesilatele, javax.swing.GroupLayout.DEFAULT_SIZE, 328, Short.MAX_VALUE)
732                            .addComponent(vstupPredmet, javax.swing.GroupLayout.DEFAULT_SIZE, 328, Short.MAX_VALUE)))
733                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, panelZpravaLayout.createSequentialGroup()
734                        .addComponent(jLabel15)
735                        .addGap(33, 33, 33)
736                        .addComponent(vstupFormatHTML, javax.swing.GroupLayout.DEFAULT_SIZE, 81, Short.MAX_VALUE)
737                        .addGap(247, 247, 247)))
738                .addContainerGap())
739        );
740        panelZpravaLayout.setVerticalGroup(
741            panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
742            .addGroup(panelZpravaLayout.createSequentialGroup()
743                .addContainerGap()
744                .addGroup(panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
745                    .addComponent(jLabel1)
746                    .addComponent(vstupPredmet, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
747                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
748                .addGroup(panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
749                    .addComponent(jLabel2)
750                    .addComponent(vstupJmenoOdesilatele, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
751                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
752                .addGroup(panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
753                    .addComponent(vstupAdresaOdesilatele, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
754                    .addComponent(odpovedetKomuOdkaz, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
755                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
756                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 184, Short.MAX_VALUE)
757                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
758                .addGroup(panelZpravaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
759                    .addComponent(jLabel15)
760                    .addComponent(vstupFormatHTML))
761                .addContainerGap())
762        );
763
764        odpovedetKomuDialog.setTitle("Adresa pro odpovědi");
765        odpovedetKomuDialog.setModal(true);
766
767        jLabel18.setText("Jméno");
768
769        jLabel19.setText("Adresa");
770
771        jLabel17.setText("<html>\n<p>Pokud bude příjemce na hromadnou zprávu odpovídat,</p>\n<p>odpověď přijde na tuto adresu.</p>\n<p>Pokud tyto údaje nevyplníte, nebo zadáte chybný e-mail,</p>\n<p>budou odpovědi chodit odesílateli.</p>\n</html>");
772
773        odpovedetKomuHotovo.setText("Hotovo");
774        odpovedetKomuHotovo.addActionListener(new java.awt.event.ActionListener() {
775            public void actionPerformed(java.awt.event.ActionEvent evt) {
776                odpovedetKomuHotovoActionPerformed(evt);
777            }
778        });
779
780        javax.swing.GroupLayout odpovedetKomuDialogLayout = new javax.swing.GroupLayout(odpovedetKomuDialog.getContentPane());
781        odpovedetKomuDialog.getContentPane().setLayout(odpovedetKomuDialogLayout);
782        odpovedetKomuDialogLayout.setHorizontalGroup(
783            odpovedetKomuDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
784            .addGroup(odpovedetKomuDialogLayout.createSequentialGroup()
785                .addContainerGap()
786                .addGroup(odpovedetKomuDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
787                    .addGroup(odpovedetKomuDialogLayout.createSequentialGroup()
788                        .addGroup(odpovedetKomuDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
789                            .addComponent(jLabel19)
790                            .addComponent(jLabel18))
791                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
792                        .addGroup(odpovedetKomuDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
793                            .addComponent(odpovedetKomuAdresa, javax.swing.GroupLayout.DEFAULT_SIZE, 332, Short.MAX_VALUE)
794                            .addComponent(odpovedetKomuJmeno, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 332, Short.MAX_VALUE)))
795                    .addComponent(jLabel17, javax.swing.GroupLayout.DEFAULT_SIZE, 382, Short.MAX_VALUE)
796                    .addComponent(odpovedetKomuHotovo, javax.swing.GroupLayout.Alignment.TRAILING))
797                .addContainerGap())
798        );
799        odpovedetKomuDialogLayout.setVerticalGroup(
800            odpovedetKomuDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
801            .addGroup(odpovedetKomuDialogLayout.createSequentialGroup()
802                .addContainerGap()
803                .addGroup(odpovedetKomuDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
804                    .addComponent(jLabel18)
805                    .addComponent(odpovedetKomuJmeno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
806                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
807                .addGroup(odpovedetKomuDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
808                    .addComponent(jLabel19)
809                    .addComponent(odpovedetKomuAdresa, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
810                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
811                .addComponent(jLabel17)
812                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
813                .addComponent(odpovedetKomuHotovo)
814                .addContainerGap())
815        );
816
817        setTitle("SuperPošťák");
818        addWindowListener(new java.awt.event.WindowAdapter() {
819            public void windowClosing(java.awt.event.WindowEvent evt) {
820                formWindowClosing(evt);
821            }
822        });
823
824        jXHeader1.setDescription("Program pro posílání hromadných zpráv elektronickou poštou.\nNezneužívejte pro rozesílání spamu.");
825        jXHeader1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/xfmail.png"))); // NOI18N
826        jXHeader1.setTitle("SuperPošťák");
827
828        taskPanel.setBackground(javax.swing.UIManager.getDefaults().getColor("Button.background"));
829
830        jXTaskPane1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/mail_generic.png"))); // NOI18N
831        jXTaskPane1.setTitle("Hromadná zpráva");
832
833        lnText.setMnemonic('z');
834        lnText.setText("Text zprávy");
835        lnText.setActionCommand("Zpráva");
836        lnText.addActionListener(new java.awt.event.ActionListener() {
837            public void actionPerformed(java.awt.event.ActionEvent evt) {
838                lnTextActionPerformed(evt);
839            }
840        });
841        jXTaskPane1.getContentPane().add(lnText);
842
843        lnPrijemci.setMnemonic('p');
844        lnPrijemci.setText("Příjemci");
845        lnPrijemci.addActionListener(new java.awt.event.ActionListener() {
846            public void actionPerformed(java.awt.event.ActionEvent evt) {
847                lnPrijemciActionPerformed(evt);
848            }
849        });
850        jXTaskPane1.getContentPane().add(lnPrijemci);
851
852        lnOdeslat.setMnemonic('o');
853        lnOdeslat.setText("Odeslat");
854        lnOdeslat.addActionListener(new java.awt.event.ActionListener() {
855            public void actionPerformed(java.awt.event.ActionEvent evt) {
856                lnOdeslatActionPerformed(evt);
857            }
858        });
859        jXTaskPane1.getContentPane().add(lnOdeslat);
860
861        taskPanel.add(jXTaskPane1);
862
863        jXTaskPane2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/cz/frantovo/superPostak/obrazky/gear.png"))); // NOI18N
864        jXTaskPane2.setTitle("Nastavení");
865
866        lnServer.setMnemonic('s');
867        lnServer.setText("Poštovní server");
868        lnServer.addActionListener(new java.awt.event.ActionListener() {
869            public void actionPerformed(java.awt.event.ActionEvent evt) {
870                lnServerActionPerformed(evt);
871            }
872        });
873        jXTaskPane2.getContentPane().add(lnServer);
874
875        lnDatabaze.setMnemonic('d');
876        lnDatabaze.setText("Databáze");
877        lnDatabaze.addActionListener(new java.awt.event.ActionListener() {
878            public void actionPerformed(java.awt.event.ActionEvent evt) {
879                lnDatabazeActionPerformed(evt);
880            }
881        });
882        jXTaskPane2.getContentPane().add(lnDatabaze);
883
884        lnVychoziPrijemci.setMnemonic('v');
885        lnVychoziPrijemci.setText("Výchozí příjemci");
886        lnVychoziPrijemci.addActionListener(new java.awt.event.ActionListener() {
887            public void actionPerformed(java.awt.event.ActionEvent evt) {
888                lnVychoziPrijemciActionPerformed(evt);
889            }
890        });
891        jXTaskPane2.getContentPane().add(lnVychoziPrijemci);
892
893        taskPanel.add(jXTaskPane2);
894
895        panel.setLayout(new java.awt.CardLayout());
896
897        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
898        getContentPane().setLayout(layout);
899        layout.setHorizontalGroup(
900            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
901            .addGroup(layout.createSequentialGroup()
902                .addComponent(taskPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 196, javax.swing.GroupLayout.PREFERRED_SIZE)
903                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
904                .addComponent(panel, javax.swing.GroupLayout.DEFAULT_SIZE, 342, Short.MAX_VALUE))
905            .addComponent(jXHeader1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 544, Short.MAX_VALUE)
906        );
907        layout.setVerticalGroup(
908            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
909            .addGroup(layout.createSequentialGroup()
910                .addComponent(jXHeader1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
911                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
912                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
913                    .addComponent(taskPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 340, Short.MAX_VALUE)
914                    .addComponent(panel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 340, Short.MAX_VALUE)))
915        );
916
917        pack();
918    }// </editor-fold>//GEN-END:initComponents
919    private void vstupPredmetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_vstupPredmetActionPerformed
920}//GEN-LAST:event_vstupPredmetActionPerformed
921
922    private void lnTextActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lnTextActionPerformed
923        setPanel(panelZprava);
924    }//GEN-LAST:event_lnTextActionPerformed
925
926    private void lnPrijemciActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lnPrijemciActionPerformed
927        setPanel(panelPrijemci);
928    }//GEN-LAST:event_lnPrijemciActionPerformed
929
930    private void lnOdeslatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lnOdeslatActionPerformed
931        setPanel(panelOdeslat);
932    }//GEN-LAST:event_lnOdeslatActionPerformed
933
934    private void lnServerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lnServerActionPerformed
935        setPanel(panelServer);
936    }//GEN-LAST:event_lnServerActionPerformed
937
938    private void lnDatabazeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lnDatabazeActionPerformed
939        setPanel(panelDatabaze);
940    }//GEN-LAST:event_lnDatabazeActionPerformed
941
942    private void lnVychoziPrijemciActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lnVychoziPrijemciActionPerformed
943        setPanel(panelVychoziPrijemci);
944    }//GEN-LAST:event_lnVychoziPrijemciActionPerformed
945
946    private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
947        ulozNastaveni();
948        log.log(Level.WARNING, "Ukončuji program.");
949    }//GEN-LAST:event_formWindowClosing
950
951    /**
952     * Sestaví zprávu na základě GUI vstupů. Všechno kromě příjemců,
953     * ti se přidají až dodatečně, podle toho,
954     * jestli jde o zkušební nebo skutečné rozesílání.
955     */
956    private HromadnaZprava getZprava() throws UnsupportedEncodingException {
957        HromadnaZprava zprava = new HromadnaZprava();
958        zprava.setOdesilatel(new InternetAddress(vstupAdresaOdesilatele.getText(), vstupJmenoOdesilatele.getText()));
959        zprava.setPredmet(vstupPredmet.getText());
960        zprava.setText(vstupZprava.getText());
961        zprava.setFormatHTML(vstupFormatHTML.isSelected());
962
963        if (Postak.zkontrolujAdresu(odpovedetKomuAdresa.getText())) {
964            InternetAddress komu = new InternetAddress();
965            komu.setPersonal(odpovedetKomuJmeno.getText());
966            komu.setAddress(odpovedetKomuAdresa.getText());
967            zprava.setOdpovedetKomu(komu);
968        }
969
970        return zprava;
971    }
972
973    /** Všichni příjemci, kterým bude odeslána ostrá zpráva. */
974    private ArrayList<InternetAddressKomu> getPrijemciVsichni() throws SQLException, UnsupportedEncodingException {
975        ArrayList<InternetAddressKomu> vsichni = new ArrayList<InternetAddressKomu>();
976        Collection<InternetAddressKomu> adresyVychozi = nastaveni.getVychoziPrijemci();
977        Collection<InternetAddressKomu> adresySQL = getPrijemciSQL();
978        Collection<InternetAddressKomu> adresyDodatecne = prijemciDodatecni.getAdresy();
979
980        if (adresyVychozi != null) {
981            vsichni.addAll(adresyVychozi);
982        }
983        if (adresySQL != null) {
984            vsichni.addAll(adresySQL);
985        }
986        if (adresyDodatecne != null) {
987            vsichni.addAll(adresyDodatecne);
988        }
989        return vsichni;
990    }
991
992    private void rozeslatHromadnouZpravuTlacitkoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rozeslatHromadnouZpravuTlacitkoActionPerformed
993        try {
994            ulozNastaveniGUI();
995            HromadnaZprava zprava = getZprava();
996            zprava.setPrijemci(getPrijemciVsichni());
997
998            int volba = JOptionPane.showOptionDialog(this, "Počet příjemců hromadné zprávy: " + zprava.getPrijemci().size() + "\nPřejete si zprávu odeslat?", "Potvrdit odeslání", JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
999            if (volba == JOptionPane.YES_OPTION) {
1000                odesli(zprava);
1001                Postak.vypisPrijemce(zprava.getPrijemci());
1002                zobrazInformacniDialog("Odesláno", "Zpráva byla odeslána.\nPočet příjemců: " + zprava.getPrijemci().size(), true);
1003            }
1004        } catch (Exception e) {
1005            zobrazChybovyDialog("Zprávu se nepodařilo odeslat", e, Level.SEVERE, true);
1006        }
1007}//GEN-LAST:event_rozeslatHromadnouZpravuTlacitkoActionPerformed
1008
1009    private void rozeslatZkusebniTlacitkoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rozeslatZkusebniTlacitkoActionPerformed
1010        try {
1011            ulozNastaveniGUI();
1012            HromadnaZprava zprava = getZprava();
1013            zprava.setPrijemci(prijemciZkusebni.getAdresy());
1014
1015            odesli(zprava);
1016
1017            zobrazInformacniDialog("Odesláno", "Zkušební zpráva byla odeslána.\nPočet adresátů: " + zprava.getPrijemci().size(), true);
1018        } catch (Exception e) {
1019            zobrazChybovyDialog("Zkušební zprávu se nepodařilo odeslat", e, Level.SEVERE, true);
1020        }
1021    }//GEN-LAST:event_rozeslatZkusebniTlacitkoActionPerformed
1022
1023    private void vyzkousetPripojeniTlacitkoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_vyzkousetPripojeniTlacitkoActionPerformed
1024        try {
1025            getSpojeni();//GEN-LAST:event_vyzkousetPripojeniTlacitkoActionPerformed
1026            zobrazInformacniDialog("Připojeno k DB", "Připojení k DB proběhlo úspěšně", false);
1027        } catch (SQLException e) {
1028            zobrazChybovyDialog("Spojení s DB", "Připojení k databázi selhalo", null, e, Level.SEVERE, true);
1029        }
1030    }
1031
1032    private void vyzkousetSQLTlacitkoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_vyzkousetSQLTlacitkoActionPerformed
1033        try {
1034            Collection<InternetAddressKomu> adresy = getPrijemciSQL();//GEN-LAST:event_vyzkousetSQLTlacitkoActionPerformed
1035            if (adresy == null) {
1036                zobrazInformacniDialog("SQL dotaz", "Dotaz do databáze neproběhl.\nSQL dotaz je prázdný.", false);
1037            } else {
1038                zobrazInformacniDialog("SQL dotaz", "Dotaz do databáze byl úspěšný.\nPočet získaných záznamů: " + adresy.size(), false);
1039            }
1040        } catch (Exception e) {
1041            zobrazChybovyDialog("SQL dotaz", "Provedení SQL příkazu selhalo selhalo", null, e, Level.SEVERE, true);
1042        }
1043    }
1044
1045    private void zobrazitSQLPrijemceTlacitkoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_zobrazitSQLPrijemceTlacitkoActionPerformed
1046        try {
1047            Collection<InternetAddressKomu> adresy = getPrijemciSQL();
1048
1049            ZobrazovacAdres zobrazovac = new ZobrazovacAdres(this, false);
1050            zobrazovac.setAdresy(adresy);
1051            zobrazovac.setLocationRelativeTo(this);
1052            zobrazovac.setVisible(true);
1053
1054        } catch (Exception e) {
1055            zobrazChybovyDialog("SQL dotaz", "Provedení SQL příkazu selhalo selhalo", null, e, Level.SEVERE, true);
1056        }
1057    }//GEN-LAST:event_zobrazitSQLPrijemceTlacitkoActionPerformed
1058
1059    private void zobrazitVsechnyPrijemceTlacitkoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_zobrazitVsechnyPrijemceTlacitkoActionPerformed
1060        try {
1061            Collection<InternetAddressKomu> adresy = getPrijemciVsichni();
1062
1063            ZobrazovacAdres zobrazovac = new ZobrazovacAdres(this, false);
1064            zobrazovac.setAdresy(adresy);
1065            zobrazovac.setLocationRelativeTo(this);
1066            zobrazovac.setVisible(true);
1067
1068        } catch (Exception e) {
1069            zobrazChybovyDialog("SQL dotaz", "Provedení SQL příkazu selhalo selhalo", null, e, Level.SEVERE, true);
1070        }
1071    }//GEN-LAST:event_zobrazitVsechnyPrijemceTlacitkoActionPerformed
1072
1073    private void odpovedetKomuOdkazActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_odpovedetKomuOdkazActionPerformed
1074        odpovedetKomuDialog.pack();
1075        odpovedetKomuDialog.setLocationRelativeTo(this);
1076        odpovedetKomuDialog.setModalityType(ModalityType.APPLICATION_MODAL);
1077        odpovedetKomuDialog.getRootPane().setDefaultButton(odpovedetKomuHotovo);
1078        odpovedetKomuDialog.setVisible(true);
1079}//GEN-LAST:event_odpovedetKomuOdkazActionPerformed
1080
1081    private void odpovedetKomuHotovoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_odpovedetKomuHotovoActionPerformed
1082        odpovedetKomuDialog.setVisible(false);
1083}//GEN-LAST:event_odpovedetKomuHotovoActionPerformed
1084
1085    /** Provede uživatelem zadaný SQL dotaz a vrátí získané příjemce */
1086    private Collection<InternetAddressKomu> getPrijemciSQL() throws SQLException, UnsupportedEncodingException {
1087        if ("".equals(vstupSQL.getText())) {
1088            return null;
1089        } else {
1090            return getSpojeni().getAdresy(vstupSQL.getText());
1091        }
1092    }
1093
1094    private DataSQL getSpojeni() throws SQLException {
1095        return Data.getSpojeniSQL(vstupDatabaze.getText(), vstupDBjmeno.getText(), vstupDBheslo.getPassword());
1096    }
1097
1098    /** Obalovací třída, která v průběhu odesílání zobrazuje kurzor s hodinami. */
1099    private void odesli(HromadnaZprava zprava) throws MessagingException {
1100        setCursor(new Cursor(Cursor.WAIT_CURSOR));
1101        try {
1102            postak.setNastaveni(nastaveni);
1103            postak.odesli(zprava);
1104
1105        } catch (MessagingException e) {
1106            throw e;
1107        } finally {
1108            setCursor(Cursor.getDefaultCursor());
1109        }
1110    }
1111
1112    private void setPanel(JComponent komponenta) {
1113
1114        if (panel.getLayout() instanceof CardLayout) {
1115            CardLayout l = (CardLayout) panel.getLayout();
1116            l.show(panel, komponenta.getName());
1117        } else {
1118            log.log(Level.WARNING, "Neplatí: panel.getLayout() instanceof CardLayout");
1119        }
1120
1121    }
1122
1123    /** Změní chování tabulátoru v textovém poli - aby se pomocí TABu dalo skočit na další komponentu */
1124    private void vyresitTabFocusProblem(JTextArea textArea) {
1125        textArea.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, null);
1126        textArea.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, null);
1127    }
1128
1129    public JXTaskPaneContainer getTaskPanel() {
1130        return taskPanel;
1131    }
1132
1133    /**
1134     * @param args the command line arguments
1135     */
1136    public static void main(String args[]) {
1137        final boolean ladit = (args != null && args.length > 0 && args[0].equals("ladit"));
1138
1139        try {
1140            //LookAndFeel laf = UIManager.getLookAndFeel();
1141
1142            //laf = new SubstanceLookAndFeel();
1143            //laf = new SubstanceBusinessLookAndFeel();
1144            //laf = new SubstanceBusinessBlueSteelLookAndFeel();
1145            //laf = new SubstanceBusinessBlackSteelLookAndFeel();
1146
1147            UIManager.setLookAndFeel("org.jvnet.substance.skin.SubstanceBusinessBlueSteelLookAndFeel");
1148        } catch (ClassNotFoundException ex) {
1149            log.log(Level.SEVERE, null, ex);
1150        } catch (InstantiationException ex) {
1151            log.log(Level.SEVERE, null, ex);
1152        } catch (IllegalAccessException ex) {
1153            log.log(Level.SEVERE, null, ex);
1154        } catch (UnsupportedLookAndFeelException ex) {
1155            log.log(Level.SEVERE, null, ex);
1156        }
1157
1158        java.awt.EventQueue.invokeLater(new Runnable() {
1159
1160            public void run() {
1161                new SuperPostak(ladit, true).setVisible(true);
1162            }
1163        });
1164    }
1165    // Variables declaration - do not modify//GEN-BEGIN:variables
1166    private javax.swing.JLabel jLabel1;
1167    private javax.swing.JLabel jLabel10;
1168    private javax.swing.JLabel jLabel11;
1169    private javax.swing.JLabel jLabel12;
1170    private javax.swing.JLabel jLabel13;
1171    private javax.swing.JLabel jLabel14;
1172    private javax.swing.JLabel jLabel15;
1173    private javax.swing.JLabel jLabel16;
1174    private javax.swing.JLabel jLabel17;
1175    private javax.swing.JLabel jLabel18;
1176    private javax.swing.JLabel jLabel19;
1177    private javax.swing.JLabel jLabel2;
1178    private javax.swing.JLabel jLabel4;
1179    private javax.swing.JLabel jLabel5;
1180    private javax.swing.JLabel jLabel6;
1181    private javax.swing.JLabel jLabel7;
1182    private javax.swing.JLabel jLabel8;
1183    private javax.swing.JLabel jLabel9;
1184    private javax.swing.JPanel jPanel1;
1185    private javax.swing.JScrollPane jScrollPane1;
1186    private javax.swing.JScrollPane jScrollPane3;
1187    private javax.swing.JSeparator jSeparator1;
1188    private javax.swing.JSeparator jSeparator2;
1189    private org.jdesktop.swingx.JXHeader jXHeader1;
1190    private org.jdesktop.swingx.JXTaskPane jXTaskPane1;
1191    private org.jdesktop.swingx.JXTaskPane jXTaskPane2;
1192    private org.jdesktop.swingx.JXHyperlink lnDatabaze;
1193    private org.jdesktop.swingx.JXHyperlink lnOdeslat;
1194    private org.jdesktop.swingx.JXHyperlink lnPrijemci;
1195    private org.jdesktop.swingx.JXHyperlink lnServer;
1196    private org.jdesktop.swingx.JXHyperlink lnText;
1197    private org.jdesktop.swingx.JXHyperlink lnVychoziPrijemci;
1198    private javax.swing.JTextArea napovedaSMTP;
1199    private javax.swing.JScrollPane napovedaSMTPscroll;
1200    private javax.swing.JTextField odpovedetKomuAdresa;
1201    private javax.swing.JDialog odpovedetKomuDialog;
1202    private javax.swing.JButton odpovedetKomuHotovo;
1203    private javax.swing.JTextField odpovedetKomuJmeno;
1204    private org.jdesktop.swingx.JXHyperlink odpovedetKomuOdkaz;
1205    private org.jdesktop.swingx.JXPanel panel;
1206    private org.jdesktop.swingx.JXPanel panelDatabaze;
1207    private org.jdesktop.swingx.JXPanel panelOdeslat;
1208    private org.jdesktop.swingx.JXPanel panelPrijemci;
1209    private org.jdesktop.swingx.JXPanel panelServer;
1210    private org.jdesktop.swingx.JXPanel panelVychoziPrijemci;
1211    private org.jdesktop.swingx.JXPanel panelZprava;
1212    private cz.frantovo.superPostak.PanelPrijemcu prijemciDodatecni;
1213    private cz.frantovo.superPostak.PanelPrijemcu prijemciVychozi;
1214    private cz.frantovo.superPostak.PanelPrijemcu prijemciZkusebni;
1215    private javax.swing.JButton rozeslatHromadnouZpravuTlacitko;
1216    private javax.swing.JButton rozeslatZkusebniTlacitko;
1217    private org.jdesktop.swingx.JXTaskPaneContainer taskPanel;
1218    private javax.swing.JTextField vstupAdresaOdesilatele;
1219    private javax.swing.JPasswordField vstupDBheslo;
1220    private javax.swing.JTextField vstupDBjmeno;
1221    private javax.swing.JTextField vstupDatabaze;
1222    private javax.swing.JCheckBox vstupFormatHTML;
1223    private javax.swing.JTextField vstupJmenoOdesilatele;
1224    private javax.swing.JTextField vstupPredmet;
1225    private javax.swing.JPasswordField vstupSMTPheslo;
1226    private javax.swing.JTextField vstupSMTPjmeno;
1227    private javax.swing.JSpinner vstupSMTPlimitPrijemcu;
1228    private javax.swing.JSpinner vstupSMTPport;
1229    private javax.swing.JTextField vstupSMTPserver;
1230    private javax.swing.JTextArea vstupSQL;
1231    private javax.swing.JTextArea vstupZprava;
1232    private javax.swing.JLabel vystupDBzprava;
1233    private javax.swing.JLabel vystupSQLZprava;
1234    private javax.swing.JButton vyzkousetPripojeniTlacitko;
1235    private javax.swing.JButton vyzkousetSQLTlacitko;
1236    private javax.swing.JButton zobrazitSQLPrijemceTlacitko;
1237    private javax.swing.JButton zobrazitVsechnyPrijemceTlacitko;
1238    // End of variables declaration//GEN-END:variables
1239}
Note: See TracBrowser for help on using the browser.