Favicon Svetmobilne.cz  Svět mobilně Favicon Svetaudia.cz  Svět audia Favicon TVFreak.cz  TV Freak   Fórum Favicon Digimanie.cz  Digimanie   Fórum   Galerie
Zobrazené výsledky: 1 až 6 z 6

Téma: Java GUI-Load a Save-vysvětlení úseku kódu

  1. #1
    Pravidelný diskutér Avatar uživatele adolfik
    Registrace
    Jun 2007
    Příspěvků
    238

    Ahoj
    Jsem ve třetáku a na cvičení programování z Javy jsem dostal učitele, co přeskočil uplně rok vyučování. Děláme GUI a diví se, že většina třídy to nechápe, protože nemáme na čem stavět. Zkrátka...nemám problém se to naučit (potřeboval bych ještě pár dnů abych lépe pochopil VV-proudy a vyjímky atd.), ale zítra píšeme "motivační písemku" (opravná na tu, ž čeho má 96% třídy za 5).
    Program (JFrame Form...) funguje tak, že načte textovej soubor pomocí tlačítka "Load", text zobrazí do textového pole, kde se dá editovat a zeditovanej text se dá zase někam uložit pomocí tlačítka "Save".
    Děláme v Netbeansu, takže polovina věcí za nás dělá Designer. V designeru nahážeme tlačítka (JButton) a textové pole (JTextArea a JScrollPane). V designeru ještě přiřádíme ke každému objektu události (Events-ActionPerformed-metody akceSave a akceLoad). Takže v source máme vygenerovanej nezměnitelnej kod popisujicí GUI a zbývá prostě popsat ty tlačítka a pole co mají dělat.
    A v tom je ten problém. Napsat to umím (chápu základy OOP-třídy a objekty, takže souvislosti OK), ale rozumím tomu tak z poloviny a potřeboval bych, kdyby mi to někdo vysvětlil.

    Nechci všechno, jen bych rád lépe pochopil co dělaj třídy JFileChooser, FileReader, BufferedReader, BufferedWriter v metodách akceSave(), akceLoad() a hlavně co to je ta moje vytvořená metoda inc().

    Kód:
    package Test01;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.FileWriter;
    import javax.swing.JFileChooser;
    
    public class JFrame extends javax.swing.JFrame {
    
        private JFileChooser jf;
        private javax.swing.JButton save;
        public JFrame() {
            initComponents();
            inc();
        }
    
        private void inc() {
          jf = new JFileChooser("C:\\Users");
          save = new javax.swing.JButton();
          save.setText("Save");
          save.setBounds(10, 40, 80, 50);
          save.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(java.awt.event.ActionEvent evt) {
            akceSave(evt);
          }
        });
    
          getContentPane().add(save);
        }
    //GENEROVANEJ KOD
    
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
        private void initComponents() {
    
            load = new javax.swing.JButton();
            jScrollPane1 = new javax.swing.JScrollPane();
            jTextArea1 = new javax.swing.JTextArea();
    
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            setTitle("Text Editor");
    
            load.setText("Load");
            load.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    akceLoad(evt);
                }
            });
    
            jTextArea1.setColumns(20);
            jTextArea1.setRows(5);
            jScrollPane1.setViewportView(jTextArea1);
    
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                    .addContainerGap(614, Short.MAX_VALUE)
                    .addComponent(load)
                    .addContainerGap())
                .addGroup(layout.createSequentialGroup()
                    .addGap(127, 127, 127)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 481, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(71, Short.MAX_VALUE))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                    .addGap(26, 26, 26)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 308, Short.MAX_VALUE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addComponent(load)
                    .addContainerGap())
            );
    
            pack();
        }// </editor-fold>//GEN-END:initComponents
    
    //KONEC GENEROVANEJ KOD
    
        private void akceLoad(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_akceLoad
          
         try {
             jf.showOpenDialog(this.load);
             BufferedReader br = new BufferedReader(new FileReader(jf.getSelectedFile()));
             String text = "";
             String linka;
             while ((linka = br.readLine()) != null) {
                 System.out.println(""+linka);
                 jTextArea1.append(linka);
             }
            
         } catch (Exception e) {
             System.out.println("Nelze load: " + e);
         }
    
        }//GEN-LAST:event_akceLoad
    
        private void akceSave(java.awt.event.ActionEvent evt) {
    
         try {
             jf.showSaveDialog(this.save);
             BufferedWriter bw = new BufferedWriter(new FileWriter(jf.getSelectedFile()));
             jTextArea1.write(bw);
    
         } catch (Exception e) {
             System.out.println("Nelze save: " + e);
         }
    
        }
    
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new JFrame().setVisible(true);
                }
            });
        }
    
        // Variables declaration - do not modify//GEN-BEGIN:variables
        private javax.swing.JScrollPane jScrollPane1;
        private javax.swing.JTextArea jTextArea1;
        private javax.swing.JButton load;
        // End of variables declaration//GEN-END:variables
    
    }
    Naposledy upraveno uživatelem adolfik: 08-11-2009 v 12:29
    Odpovídat lze po přihlášení

  2. #2
    Čestný člen Avatar uživatele mech13
    Registrace
    May 2006
    Příspěvků
    5,784

    inc se vola po spusteni a vytvori ti jf - to bude okno pro vyber a ulozeni souboru (takovy to klasicky windowsacky ulozit jako, ikdyz v swing asi bude nejaky vlastni) a tlacitko save - vytvori, nastavi polohu a udalosti a prida do content pane

    jinak tezko rict co kde konci a zacina, mohl bys to editnout a misto tagu quote pouzit code? zustane zachovano formatovani a pujde se v tom trochu vyznat...

    jinak dokumentace o tech tridach mlci?
    Odpovídat lze po přihlášení



  3. #3
    Pravidelný diskutér Avatar uživatele adolfik
    Registrace
    Jun 2007
    Příspěvků
    238

    jj dokumentaci jsem pročítal a trošku mi to pomohlo v pochopení funkce. Spíš bych potřeboval vysvětlit ty soukromé metody co popisují přes vyjímky ty tlačítka...tedy akceSave, akceLoad a hlavně inc() co je v konstruktoru. To jsou vlastně jediné věci, co budu zítra psát sám (umím to jak vůl nazpamět, ale chápu to asi tak z poloviny...z pohledu OOP). Ostaní hážu v Designeru
    Odpovídat lze po přihlášení

  4. #4
    Starousedlík SHW Avatar uživatele mstejska
    Registrace
    Dec 2007
    Příspěvků
    2,919

    Tak jednoduše od konce.

    main je startovací bod programu.
    Kód invokeLater() {
    ..
    }
    Ti spustí inicializaci tvého JFrame v gui vlákně.

    new JFrame() - vytvoří ti instanci tvého JFramu a zavolá constuructor JFrame()
    na ten se pak zavolá setVisible(true), to zobrazí okno na obrazovce.

    Teď zpátky na začátek:
    constructor JFrame()
    ti napřed implicitně zavolá konstruktor předka (java.swing.awt.JFrame)
    a pak funkce initComponents() a inc()
    initComponents() ti inicializuje komponenty JFramu (Text areu a tlačítko load)
    inc() vytvoří:
    1) JFileChooser = komponenta (dialog) kterým pak můžeš vybrat soubor pro načtení/uložení obsahu textarey.
    2) save = new javax.swing.JButton() - vytvoří nový button pro uložení
    3) save.setText("Save") - nastavi text buttonku
    4) save.setbounds() - umístí butonek do okna a nastaví velikost
    5) save.addActionListener() = přidá ActionListener butonku save
    6) funkce actionPerformed se pak vykoná při jeho stisknutí
    7) getContentPane().add(save); = přidá ten butonek koněčně do okna

    private void akceLoad(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_akceLoad

    try {
    jf.showOpenDialog(this.load); // JFileChoser zobrazí okno pro výběr souboru, který se objeví v text area
    BufferedReader br = new BufferedReader(new FileReader(jf.getSelectedFile())); // z JFileChooseru se vezme vybraný soubor a vytvoří se pro něj FileReader(), ten umí čít ze souboru, ten se strčí do BufferedReaderu, který nečte znak po znaku ale čte třeba blok 2000 znaků (pro urychlení)
    String text = "";
    String linka;
    while ((linka = br.readLine()) != null) { // čte se řádek po řádku
    System.out.println(""+linka); // vypisuje se do konzole
    jTextArea1.append(linka); // a přidává do textarey
    }

    } catch (Exception e) {
    System.out.println("Nelze load: " + e);
    }

    }//GEN-LAST:event_akceLoad

    private void akceSave(java.awt.event.ActionEvent evt) {

    try {
    jf.showSaveDialog(this.save); // zase se otevře dialog pro výběr souboru. Tentokrát pro uložení
    BufferedWriter bw = new BufferedWriter(new FileWriter(jf.getSelectedFile())); // pro tenhle soubor se udělá FileWriter, strčí se do bufferedwriteru (zase umí zapisovat do souboru, a po blocích)
    jTextArea1.write(bw); // JTextComponent (předek JTextArea) umí přímo zapsat svůj obsah pomocí writeru (kamkoli)

    } catch (Exception e) {
    System.out.println("Nelze save: " + e);
    }

    }

    Snad jsem ti to trochu osvětlil.
    Odpovídat lze po přihlášení

  5. #5
    Pravidelný diskutér Avatar uživatele adolfik
    Registrace
    Jun 2007
    Příspěvků
    238

    mstejska- opravdu ti děkuju . Tohle jsem přesně potřeboval, až rozdám 10 rep. bodů, tak nezapomenu ti za tohle něco přihodit
    Odpovídat lze po přihlášení

  6. #6
    Starousedlík SHW Avatar uživatele mstejska
    Registrace
    Dec 2007
    Příspěvků
    2,919

    Když nevíš co dělá nekterý javovský class, tak zkus v googlu: "java jmeno classu tutorial". Většinou jsou tam i příklady použití a vysvětlení co ten class vlastně dělá.
    Odpovídat lze po přihlášení

Podobná témata

  1. Rozhraní USB, BT...: čtečka čár. kódů - emulace USB - COM
    Od vsn v sekci Periferie
    Reakcí: 0
    Poslední příspěvek: 13-02-2013, 09:53
  2. Základní desky: Load fail-save defaul problém
    Od Neregistrovaný v sekci Poradna
    Reakcí: 3
    Poslední příspěvek: 01-03-2010, 17:44
  3. WScript - kontola kodu
    Od majko78 v sekci Programování
    Reakcí: 8
    Poslední příspěvek: 13-02-2010, 19:45
  4. Formátovanie C kódu
    Od eraser v sekci Programování
    Reakcí: 23
    Poslední příspěvek: 14-04-2008, 23:40
  5. Power Save Mode
    Od stechaf v sekci Monitory
    Reakcí: 19
    Poslední příspěvek: 17-01-2008, 21:02