» »

[Java] Uporaba FileChooserja

[Java] Uporaba FileChooserja

Bela01 ::

Uporabnik na začetku najprej vpiše svoje ime in priimek, ter izbere datoteko s katere bo reševal naloge. Za iskanje datoteke sem uporabla FileChooserja, ki pa očitno ni čist vredu nastavljen v actionPerformed. Ali mogoče kdo vidi napako oz. v čem je finta. Ko klikne nato uporabnik na gumb Ok, se tam sproži branje iz datoteke. Upam, da sem tudi tam pravilno napisala (za točno določeno datoteko).

Pa še celotna koda:


import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.*;
import javax.swing.filechooser.*;
 



public class ResevanjeNalog extends JApplet implements ItemListener, ActionListener {

    String[] a;
    String pres = "    ";
    //vprašanje
    String[] n = new String[100];
    //odgovori
    String[][] o = new String[100][3];
    //točke za pravilne odgovore
    int tocke = 0;
    //pravilni odgovor
    int[] odg = new int[100];
    //ime datoteke slike
    String[] sl = new String[100];
    String[] crka = new String[3];
    
    JFrame frame1 = new JFrame("Reševanje nalog");
    JFrame frame2 = new JFrame("Reševanje nalog");
    JFrame frame3 = new JFrame("Reševanje nalog");
    
    Container app;
    
    File f;
    
    //zaporedna številka naloge
    int zap = 0;
    //število nalog
    int st = 0;
    
    //Labela s tekstom, nalogo in odgovorom
    JLabel tekst = new JLabel("");
    JLabel naloga = new JLabel("");
    JLabel odgovor = new JLabel("");
    
    private String Preveri_g = "Preveri_g";
    private String Naprej_g = "Naprej_g";
    private String OK_g = "OK_g";
    private String Preklici_g = "Preklici_g";
    private String text_o = "text_o";
    private String imedat;
    private String Load_g = "Load_g";

    //ustvarimo gumbe
    JRadioButton[] rgumb = new JRadioButton[3];;  
    JButton preveri, naprej, ok, preklici, load;
    
    //grupa, ki bo združila radiobutone - rgumbe, da bodo sodelovali med seboj
    ButtonGroup grupa = new ButtonGroup();
    
        //spremenljivka za slikice
    Toolkit tool = Toolkit.getDefaultToolkit();
    Image slika;
    Icon ikona;
    JLabel slikaL;
               
    //ustvarimo panelo, ki bo nosila ostale v sebi
    JPanel namizje = new JPanel(new BorderLayout());
    JPanel namizje1 = new JPanel(new BorderLayout());
    JPanel namizje2 = new JPanel(new BorderLayout());
    JPanel resitev = new JPanel(new BorderLayout());

    //ostale panele
    JPanel navodilo = new JPanel(new BorderLayout());
    JPanel nosilna = new JPanel(new GridLayout());
    JPanel odgovori = new JPanel(new GridLayout(3, 1));
    JPanel primeri = new JPanel(new GridLayout());
    JPanel gumbi = new JPanel(new GridLayout(1, 5));
    
    //applet
    JPanel applet = new JPanel(new GridLayout(3,1));
    JPanel naslov = new JPanel(new BorderLayout());
    JLabel besedilo4;
    JLabel besedilo5;
    JLabel bes;
    private String procent;
    
    
    //začetni applet
    JPanel ogrodje1 = new JPanel(new GridLayout(5,1));
    JPanel ogrodje2 = new JPanel(new GridLayout(1,2));
    JPanel ogrodje3 = new JPanel(new GridLayout(1,2));
    JPanel ogrodje4 = new JPanel(new GridLayout(1,3));
    JPanel ogrodje5 = new JPanel(new GridLayout(1,5));
    
    JLabel bes1 = new JLabel("");
    JLabel bes2 = new JLabel("");
    JLabel bes3 = new JLabel("");
    JLabel bes4 = new JLabel("");
    JTextField textokno1 = new JTextField(10);
    JTextField textokno2 = new JTextField(10);
    JTextField textokno3 = new JTextField(10);

    private String ime, priimek;
        
       
    public void Oblika()
    {
        navodilo.setPreferredSize(new Dimension(350, 50));
        navodilo.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 0, 5, 0),
                BorderFactory.createEtchedBorder()));
                
        odgovori.setPreferredSize(new Dimension(200, 250));
        odgovori.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createTitledBorder(
                    LineBorder.createGrayLineBorder(),
                    "Možni odgovori")));
        primeri.setPreferredSize(new Dimension(200, 250));
        
        primeri.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createTitledBorder(
                    LineBorder.createGrayLineBorder(),
                    "Slika")));
        
        nosilna.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 0, 5, 0),
                BorderFactory.createEtchedBorder()));
        
        resitev.setPreferredSize(new Dimension(350, 50));
        resitev.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(1, 0, 1, 0),
                BorderFactory.createEtchedBorder()));
                
        namizje1.setBorder(BorderFactory.createEmptyBorder(5, 5, 0, 5));
        
        gumbi.setPreferredSize(new Dimension(350, 50));
        gumbi.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(1, 0, 1, 0),
                BorderFactory.createEtchedBorder()));
                
        namizje2.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5));
        
        applet.setPreferredSize(new Dimension(80, 400));
        
        applet.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createEtchedBorder()));
                
        naslov.setPreferredSize(new Dimension(100, 400));
        
        naslov.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createEtchedBorder()));
                
        ogrodje1.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createEtchedBorder()));
        
        ogrodje2.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createEtchedBorder()));
          
        ogrodje3.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createEtchedBorder()));
                
        ogrodje4.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createEtchedBorder()));
                
        ogrodje5.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createEtchedBorder()));
                
    }
     

    //metoda, ki ugotavlja stanje stikal    
    public void itemStateChanged(ItemEvent event) {
        tekst.setText("");
    }
    
    //metoda ki ugotovi stanje gumbov
    public void actionPerformed(ActionEvent event) {
        int i;
 
        if (event.getActionCommand().equals(Load_g)) {
            JFileChooser chooser = new JFileChooser();
            ExampleFileFilter filter = new ExampleFileFilter();
            
            filter.addExtension("txt");
            filter.setDescription("Tekstovne datoteke");
            chooser.setFileFilter(filter);
            int returnVal = chooser.showOpenDialog(this);

            if(returnVal == JFileChooser.APPROVE_OPTION)
            {
                f = chooser.getSelectedFile();
            } 
        }
        
        //klik na gumb prekliči
        if (event.getActionCommand().equals(Preklici_g)) {
            frame1.dispose();
        }
       
        //klik na gumb OK
        if (event.getActionCommand().equals(OK_g)) {         
                //shranimo vneseno ime datoteke
                imedat = textokno3.getText();
                ime = textokno1.getText();
                priimek = textokno2.getText();
                
                try
                {
                    BufferedReader datoteka = new BufferedReader(new FileReader(f));
                    
                    frame1.dispose();

                    st = 0;
                    String vrstica;
                    
                    try
                    {
                        while (( vrstica = datoteka.readLine()) != null)
                        {
                            //prebereš vprašanje in ga shraniš
                            n[st] = vrstica;

                            //prebereš možne odgovore in jih shraniš
                            for (i = 0; i < 3; i++)
                                o[st][i] = datoteka.readLine();
                        
                                //prebereš še številko pravilnega odgovora
                                odg[st] = Integer.parseInt(datoteka.readLine());
                                //preberemo ime datoteke slike
                                sl[st] = datoteka.readLine();
                         
                                st++;
                        }
        
                        //reševanje nalog
                        Okno2(a);
                    }
                    finally {
                        datoteka.close();
                    }
                }
                catch(IOException e) //če datoteka, ki smo jo klicali za branje ne obstaja
                {
                    textokno3.setText("Datoteke ni mogoče najti!");                     
                }  
        }
               
        if (event.getActionCommand().equals(Preveri_g)) {
            
            //ko uporanbik pritisne gumb preveri, se možnost izbire odgovora prepreči
            for (i = 0; i < 3; i++)
                rgumb[i].setEnabled(false);
                   
            if (rgumb[odg[zap]-1].isSelected())
                tekst.setText("Odgovor je pravilen!"); 
            else if (event.getActionCommand().equals(Preveri_g)) {
                    tekst.setText("Odgovor ni pravilen! Pravilen je odgovor "+(odg[zap])); }
                    
        }
                       
        //klik na gumb naprej        
        if (event.getActionCommand().equals(Naprej_g)) {
            
            //omogočimo gumbe za odgovore
            for (i = 0; i < 3; i++)
                rgumb[i].setEnabled(true);

            //preverimo pravilnost odgovora
            if (rgumb[odg[zap]-1].isSelected())
                tocke++;
            
            if (zap < st-1)
            {
                zap++;
                i = zap+1;
                naloga.setText(i+". "+n[zap]);
                
                for (i = 0; i < 3; i++)
                {
                    rgumb[i].setText(crka[i]+o[zap][i]);
                }
                
                primeri.remove(slikaL);
                slika = tool.getImage(sl[zap]+".jpg");
                ikona = new ImageIcon(slika);
                slikaL = new JLabel(ikona);
                primeri.add(slikaL);
                
                for (int k = 0; k < 3; k++)
                {
                    grupa.remove(rgumb[k]);
                    rgumb[k].setSelected(false);
                    grupa.add(rgumb[k]);
                }
            }
            else
            {
                bes.setText(pres+"Pozdravljen/-a "+ime+" "+priimek+"!");

                besedilo4.setText(pres+"Reševal/-a si kontrolno nalogo shranjeno v datoteki '"+imedat+".txt'.");
 
                procent = Integer.toString((tocke*100)/st);
                besedilo5.setText(pres+"Dosegel/-la si "+procent+"%.");
        
                frame2.dispose();
                
            }
        }
    }
 
    //glavno namizje okna2
    public JPanel NamizjeOkna2(){
     
        crka[0] = "a) ";
        crka[1] = "b) ";
        crka[2] = "c) ";

        int i = zap + 1;
        naloga.setText(i+". "+n[zap]);
          
        navodilo.add(new JLabel(pres), BorderLayout.WEST);
        navodilo.add(naloga, BorderLayout.CENTER);
        
        //ustvarimo rgumbe z možnimi odgovori
        for (i = 0; i < 3; i++)
        {   //vstavimo besedilo
            rgumb[i] = new JRadioButton(crka[i]+o[zap][i]);
            rgumb[i].addItemListener(this);
            grupa.add(rgumb[i]);
            odgovori.add(rgumb[i]);
        }

        slika = tool.getImage(sl[zap]+".jpg");
        ikona = new ImageIcon(slika);
        slikaL = new JLabel(ikona);
        primeri.add(slikaL);
                
        nosilna.add(odgovori);
        nosilna.add(primeri);
        
        resitev.add(new JLabel(pres), BorderLayout.WEST);
        resitev.add(tekst, BorderLayout.CENTER);
                
        namizje1.add(navodilo, BorderLayout.NORTH);
        namizje1.add(nosilna, BorderLayout.CENTER);
        namizje1.add(resitev, BorderLayout.SOUTH);
        
        preveri = new JButton("Preveri");
        preveri.setActionCommand(Preveri_g);
        preveri.addActionListener(this);
               
        naprej = new JButton("Naprej");
        naprej.setActionCommand(Naprej_g);
        naprej.addActionListener(this);
        
        gumbi.add(new JLabel(""));
        gumbi.add(preveri);
        gumbi.add(new JLabel(""));
        gumbi.add(naprej);
        gumbi.add(new JLabel(""));
        
        namizje2.add(gumbi, BorderLayout.SOUTH);
        
        namizje.add(namizje1, BorderLayout.NORTH);
        namizje.add(namizje2, BorderLayout.CENTER);
        
        return namizje;
    }
    
    
    //glavna metoda okna
    public void Okno2(String[] args) {

        //ustvarimo okno
        JFrame.setDefaultLookAndFeelDecorated(true);
                                
        // uporabimo drsno površino v primeru premajhnega okna
        JScrollPane pane = new JScrollPane(NamizjeOkna2());
        pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
        
        frame2.getContentPane().add(pane, BorderLayout.CENTER);
        frame2.pack();
        frame2.setVisible(true);
        
    }
       
    //sestavimo okno appleta
    public JPanel NamizjeOkno1(){
       
        bes1.setText(pres+"Pozdravljen/a!");
        
        ogrodje1.add(bes1);
        
        bes2.setText(pres+"Ime reševalca nalog:"+pres);
        textokno1.setText("ime");
        
        ogrodje2.add(bes2);
        ogrodje2.add(textokno1);
        
        bes3.setText(pres+"Priimek reševalca nalog:"+pres);
        textokno2.setText("priimek");
        
        ogrodje3.add(bes3);
        ogrodje3.add(textokno2);
        
        bes4.setText(pres+"Ime datoteke z nalogami:"+pres);
        textokno3.setText("ime datoteke");

        load = new JButton();
        load.setText("Išči ...");
        load.setActionCommand(Load_g);
        load.addActionListener(this);
        
        ogrodje4.add(bes4);
        ogrodje4.add(textokno3);
        ogrodje4.add(load);
        
        ok = new JButton("OK");
        ok.setActionCommand(OK_g);
        ok.addActionListener(this);
        
        preklici = new JButton("Preklici");
        preklici.setActionCommand(Preklici_g);
        preklici.addActionListener(this);
        
        ogrodje5.add(new JLabel(""));
        ogrodje5.add(ok);
        ogrodje5.add(new JLabel(""));
        ogrodje5.add(preklici);
        ogrodje5.add(new JLabel(""));
        
        ogrodje1.add(ogrodje2);
        ogrodje1.add(ogrodje3);
        ogrodje1.add(ogrodje4);
        ogrodje1.add(ogrodje5);
        
        
        return ogrodje1;
                
    }
        
    //glavna metoda začetnega okna
    public void Okno1(String[] args) {

        //ustvarimo okno
        JFrame.setDefaultLookAndFeelDecorated(true);
                                 
        // uporabimo drsno površino v primeru premajhnega okna
        JScrollPane pane = new JScrollPane(NamizjeOkno1());
        pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
        
        frame1.getContentPane().add(pane, BorderLayout.CENTER);
        frame1.pack();
        frame1.setVisible(true);
        
    }  
    
    //
    public void Applet()
    {
        app = this.getContentPane();

        ime = "---";
        priimek = "---";
        imedat = "---";
        procent = "---";
        
        bes = new JLabel(pres+"Pozdravljen/-a "+ime+" "+priimek+"!");
        naslov.add(bes);
        applet.add(naslov);
        
        besedilo4 = new JLabel(pres+"Reševal/-a si kontrolno nalogo shranjeno v datoteki "+imedat+".");
        applet.add(besedilo4);
        
        besedilo5 = new JLabel(pres+"Dosegel/-la si "+procent+"%");
        applet.add(besedilo5);

        app.add(applet);
        
    }
    
    //glavna metoda appleta
    public void init() {
  
        Oblika();
        Applet();
        Okno1(a);

    }
}



Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[java]problem z Throws

Oddelek: Programiranje
221615 (1144) killa bee
»

[Java] Ne zažene appleta

Oddelek: Programiranje
51217 (1150) iggy
»

[Java] Zagon appleta v HTML

Oddelek: Programiranje
161558 (1380) Bela01
»

[JAVA] branje iz datoteke

Oddelek: Programiranje
242423 (2058) Bela01
»

[Java]Vprašanja

Oddelek: Programiranje
242117 (1585) Bela01

Več podobnih tem