» »

[JAVA] branje iz datoteke

[JAVA] branje iz datoteke

bijonda ::

Hallo!
Lepo prosim ce bi mi kdo lahko pomagal. Moram napisati razrde v Javi ki bi brali z dadoteke (DMS) in bi vrnil podatke(koda dakumenta, opis dokumanta, izdaja) ter bi jih shranili na neko listo.
Jaz sem napisala ta program:

import java.io.*;

public class IzpisDat{
    public static void main(String[] args) throws IOException {

           String ime = args[0];
	BufferedReader dat = new BufferedReader (new FileReader(ime));
	       while(dat.ready()) {
	            System.out.println(dat.readLine());
		}
		dat.close();
	} //main
}   //class


Ta prebere samo eno vrstico. Program se prevede, samo ko mu podam podatek s katere datoteka naj bere mi vrne:
Exception in thread "main" java.io.FileNotFoundException: Primer (The system can
not find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.(FileInputStream.java:106)
....
Trenutno delam v textpadu, samo bom potem morala vse prensti v netbeans, da naredim web servise oz most med klientom, ki bi rad dostopal do dokumentov in temi dokumenti!

Vsake pomoci in nasveta bom zelo vesela in zelo hvalezna!
Lep dan vam zelim.

Ciao ciao Bijonda
  • spremenil: kopernik ()

kopernik ::

String line;
while((line = dat.readLine()) != null) {
  System.out.println(line);
}

Senitel ::

Če ti program vrže FileNotFoundException pomeni, da datoteka, ki si jo podala ne obstaja. Druga stvar pa je da o DMS formatu ne najdem ravno velik podatkov, samo precej verjetno ni tekstoven, kar pomeni, da ne moreš kar tako brat vrstice.

kopernik ::

yup, če ni tekstovna datoteka bodo z readerji problemčki :-)

kopernik ::

Splošnejše branje datoteke (primer kopiranja datoteke):
FileInputStream vhodnaDat =
  new FileInputStream("pot_do_datoteke/ime_datoteke");
FileOutputStream izhodnaDat =
  new FileOutputStream("pot_do_datoteke/ime_datoteke");
int len = 0;
byte[] buffer = new byte[1024]; //brali bomo po en kilobajt
while((len = vhodnaDat.read(buffer)) != -1) {
  izhodnaDat.write(buffer, 0, len);
}


Deluje tudi z netekstovnimi datotekami.

bijonda ::

Hvala za vse bom probala, ce bo deloval!

Bela01 ::

Da ne bom odpirala nove teme.

Imam program, ki bere vrstico po vrstico iz txt datoteke. Te vrstice bi rada shranila v določene String spremenljivke (polja). Vendar imam pri tem težave, ker mi ne gre shranit teh vrstic v te spremenljivke. Kako to popravit?

...
String[] n = new String[3];
...
String vrstica = null; 

        int i = 0;
        
        try
        {
           BufferedReader datoteka = new BufferedReader(new FileReader("datoteka.txt"));  

           while (datoteka.ready()) {
               while ((vrstica = datoteka.readLine()) != null) {
                   if (i == 1) { //to še morem naredit s case stavki
                       if (zap == 0)
                            n[0] = vrstica;
                       if (zap == 1)
                            n[1] = vrstica;
                       if (zap == 2)
                            n[2] = vrstica;
                        }
                       
                                    
                       i++;
                       if (i = 6)
                       {
                           i = 0;
                           zap++;
                        }
                 }
            }
            datoteka.close();

           }
...

PaX_MaN ::

Kaj sploh hočeš prebrat?

Tutankhamun ::

če sm prov zastopu, kar ni prov lahko iz tvoje čudne kode, bi rada prebrala 2, 9 in 16 vrstico ter jih zapisala v tabelo na mesto 0, 1 in 2? Če je tako potem koda spodaj, če ne, pa napiš kaj točn bi rada

while ((vrstica = datoteka.readLine()) != null) {
     if (i%7 == 1)
     {
           n[i/7] = vrstica;
           if (i/7 == 2) break; \\ prekini z branjem
     }
}
AMD Phenom QUAD 9950 Black Edition, 8GB

Zgodovina sprememb…

Bela01 ::

Tutankhamun: Saj tisti if stavek bi jaz že preoblikovala iz 3 v enega. Ni v tem problem. Problem je v tem, da ne morem shranit spremenljivke vrstica v spremenljivko n[i].
Izpiše mi napako: non-static variable n cannot be referenced from a static context.

Kaj pa hočem prebrat: V datoteki imam shranjeno besedilo. Npr.: V prvi, šesti in enajsti vrstici imam shranjena vprašanja, ki bi jih shranila v spremenljivko n z indexom 1, 2 in 3. V vrsticah od 2 do 4, 7-9 in 12-14 imam shranjene odgovore, ki bi jih shranla v spremenljivko o[zap][i], ...
(Pod zaporedje imam mišljeno, da so to 3 sklopi -> 3×(vprašanje, 3 odgovori, pravilni odg) - vse skupaj je to 15 vrstic v datoteki.

Bela01 ::

Sedaj sem preoblikovala kodo. Mogoče bo sedaj bolj razvidno kaj hočem.


//vprašanje
    String[] n = new String[3];
    //odgovori
    String[][] o = new String[3][3];
    //pravilni odgovor
    int[] odg = new int[3];
    //zaporedna številka naloge
    int zap = 0;


public static void main(String[] args) {

        String vrstica = null; 

        int i = 0;
        
        try
        {
           BufferedReader datoteka = new BufferedReader(new FileReader("datoteka.txt"));  

           while (datoteka.ready()) {
               while ((vrstica = datoteka.readLine()) != null) {
                   
                   switch (i) {
                       case 0: { n[zap] = vrstica; //shrani vprašanje
                                break;
                            }
                       case 1: { o[zap][i] = vrstica; //shrani prvi odgovor
                                break;
                            }
                       case 2: { o[zap][i] = vrstica; //shrani drugi odgovor
                                break;
                            }
                       case 3: { o[zap][i] = vrstica; //shrani tretji odgovor
                                break;
                            }
                       case 4: { odg[i] = vrstica; //shrani rešitev
                                break;
                            }       
                    }
                    i++;
                       if (i = 5)
                       {
                           i = 0;
                           zap++;
                        }
                 }
            }
            datoteka.close();

           }




Torej izpisuje mi napako: non-static variable n cannot be referenced from a static context Zakaj ne morem shranit spremenljivko vrstica v spremenljivko n z nekim indexom i. Obe spremelnjivlki sta tipa String, le da je n polje s 3 mesti. V vsako mesto bi pa rada, da se shrani nek stavek, ki je shranjen v spremenljivki vrstici.

moowy123 ::

Daj ti prestavi tvoje spremenljivke znotraj main metode...

PaX_MaN ::

Ker se kliče metodo main iz statičnega konteksta, ne more dostopat do ne-statične spremenljivke. Pri spremenljivkah n,o in odg na začetku (pred tipom) pripiši še "static".

Bela01 ::

Hvala, ne kaže več napak. Zdaj morem samo še videt, če vse skupaj sploh dela prav. :)

Bela01 ::

Še vedno se mantram s tem programom.

Branje iz datoteke mi ne deluje pravilno (ne zaženemi sploh appleta), sicer pa ne javlja napak. Zdaj sicer skupaj nekak sestavljam okno od appleta, ki še ne dela vse ok, vendar tu ni to problem.

Zanima me kaj je narobe pri branju iz datoteke?

Pa naj dam najprej vsebino datoteke:

"
1. Koliko meri kot v podanem trikotniku?
a) 30°
b) 60°
c) 40°
1
2. Kako imenujemo točko T?
a) Višinska točka
b) Težiščnica
c) Središče očrtanega kroga
2
3. Premici p in q sta vzporedni. Katera trditev velja?
a) kot a je enako velik kot kot b
b) kot a je enako velik kot kot d
c) kot a je enako velik kot kot c
3
"

To pa je koda programa:


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

public class Naloga extends JApplet implements ItemListener, ActionListener {

    String[] a;
    String pres = "    ";
    //vprašanje
    String[] n = new String[3];
    //odgovori
    String[][] o = new String[3][3];
    //točke za pravilne odgovore
    int[] tocke = new int[3];
    //pravilni odgovor
    int[] odg = new int[3];
    
    //zaporedna številka naloge
    int zap = 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";
    
      
    //ustvarimo gumbe
    JRadioButton[] rgumb = new JRadioButton[3];;  
    JButton preveri, naprej;
    
    //spremenljivka za slikice
    Toolkit tool = Toolkit.getDefaultToolkit();
    Image slika = tool.getImage("naloga1.jpg");
    
       
    //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, 2));
          
    JLabel izpis = new JLabel(" ");
    
    //panele za applet
    JPanel applet = new JPanel(new GridLayout(7,1));
    JPanel naslov = new JPanel(new BorderLayout());
    JPanel n_1 = new JPanel(new GridLayout(2,1));
    JPanel n_2 = new JPanel(new GridLayout(2,1));
    JPanel n_3 = new JPanel(new GridLayout(2,1));
    JPanel nal1 = new JPanel(new GridLayout(2,2));
    JPanel nal2 = new JPanel(new GridLayout(2,2));
    JPanel nal3 = new JPanel(new GridLayout(2,2));
    
    //labele za applet
    JLabel nas = new JLabel("Rezultati reševanja");
    JLabel tekst1 = new JLabel("Pravilen odgovor: ");
    JLabel tekst2 = new JLabel("Dosežene točke: ");
    

    public void ZgradiApplet()
    {
        Container app = this.getContentPane();
        
        applet.setPreferredSize(new Dimension(500,500));
        naslov.setPreferredSize(new Dimension(500,20));
        n_1.setPreferredSize(new Dimension(500,60));
        nal1.setPreferredSize(new Dimension(500,40));
        n_2.setPreferredSize(new Dimension(500,60));
        nal2.setPreferredSize(new Dimension(500,40));
        n_3.setPreferredSize(new Dimension(500,60));
        nal3.setPreferredSize(new Dimension(500,40));
        
        naslov.add(nas);
                
        nal1.add(tekst1);
        nal1.add(new JLabel(o[0][0]));
        nal1.add(tekst2);
        nal1.add(new JLabel(String.valueOf(tocke[0])));
        
        nal2.add(tekst1);
        nal2.add(new JLabel(o[1][1]));
        nal2.add(tekst2);
        nal2.add(new JLabel(String.valueOf(tocke[1])));
        
        nal3.add(tekst1);
        nal3.add(new JLabel(o[2][2]));
        nal3.add(tekst2);
        nal3.add(new JLabel(String.valueOf(tocke[2])));
        
        
        n_1.add(new JLabel(n[0]));
        n_1.add(nal1);
        n_2.add(new JLabel(n[1]));
        n_2.add(nal2);
        n_3.add(new JLabel(n[2]));
        n_3.add(nal3);
        
        applet.add(naslov);
        applet.add(n_1);
        applet.add(n_2);
        applet.add(n_3);
        
        app.add(applet);
        
    }
    
    //Panela z navodilom naloge
    public JPanel NavodiloP(){
        
        navodilo.setPreferredSize(new Dimension(350, 50));
        
        navodilo.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 0, 5, 0),
                BorderFactory.createEtchedBorder()));
                
        navodilo.add(new JLabel(pres), BorderLayout.WEST);
        navodilo.add(naloga, BorderLayout.CENTER);
        
        return navodilo;
    }
    
    //v grupo dodamo stikala oz. radiobuttone
    void DodajStikala(){
        //grupa, ki bo združila radiobutone - rgumbe, da bodo sodelovali med seboj
        ButtonGroup grupa = new ButtonGroup();
        
        //ustvarimo rgumbe z možnimi odgovori
        for (int i = 0; i < 3; i++)
        {
            rgumb[i] = new JRadioButton(o[zap][i]);
            if (i != odg[zap])
                rgumb[i].setActionCommand("NE");
            else
                rgumb[i].setActionCommand("DA");
            rgumb[i].addItemListener(this);
            grupa.add(rgumb[i]);
        }
    }
    
    //Panela ki vsebuje stikala
    public JPanel OdgovoriP(){
        DodajStikala();
        odgovori.setPreferredSize(new Dimension(200, 250));
        
        odgovori.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createTitledBorder(
                    LineBorder.createGrayLineBorder(),
                    "Možni odgovori")));
                    
        for (int i = 0; i < 3; i++)
        {
            odgovori.add(rgumb[i]);
        }
        
        return odgovori;
    }
    
    //Panela ki vsebuje slike
    public JPanel PrimeriP(){
        
        primeri.setPreferredSize(new Dimension(200, 250));
        
        primeri.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createTitledBorder(
                    LineBorder.createGrayLineBorder(),
                    "Slika kot pomoč")));
                    
        Icon ikona = new ImageIcon(slika);
        primeri.add(new JLabel(ikona));
     
        return primeri;
    }
   
    //Panela ki vsebuje paneli odgovori in primeri
    public JPanel NosilnaP(){
        
        OdgovoriP();
        PrimeriP();
        
        nosilna.add(odgovori);
        nosilna.add(primeri);
        
        nosilna.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 0, 5, 0),
                BorderFactory.createEtchedBorder()));

        return nosilna;
    }
    
    //panela ki vsebuje labelo s tekstom
    public JPanel ResitevP(){
        
        resitev.add(izpis);
        resitev.setPreferredSize(new Dimension(350, 50));
        
        resitev.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(1, 0, 1, 0),
                BorderFactory.createEtchedBorder()));
        
        resitev.add(new JLabel(pres), BorderLayout.WEST);
        resitev.add(tekst, BorderLayout.CENTER);
                
        return resitev;
    }
    
    //panela namizje1 vsebuje panele navodilo, nosilna in resitev
    public JPanel Namizje1P(){
        
        NavodiloP();
        NosilnaP();
        ResitevP();
        
        namizje1.add(navodilo, BorderLayout.NORTH);
        namizje1.add(nosilna, BorderLayout.CENTER);
        namizje1.add(resitev, BorderLayout.SOUTH);
        
        namizje1.setBorder(BorderFactory.createEmptyBorder(5, 5, 0, 5));
        
        return namizje1;
    }
    
    //panela ki vsebuje gumba preveri in naprej
    public JPanel GumbiP(){
        
        gumbi.setPreferredSize(new Dimension(350, 50));
        
        gumbi.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(1, 0, 1, 0),
                BorderFactory.createEtchedBorder()));
        
        //ustvarimo in vstavimo v labelo gumba preveri in naprej
        preveri = new JButton("Preveri");
        preveri.setActionCommand(Preveri_g);
        preveri.addActionListener(this);
        gumbi.add(preveri);
        naprej = new JButton("Naprej");
        naprej.setActionCommand(Naprej_g);
        naprej.addActionListener(this);
        gumbi.add(naprej);
        
        return gumbi;
    }
    
    //panela ki vsebuje gumbe
    public JPanel Namizje2P(){
        
        GumbiP();
        
        namizje2.add(gumbi, BorderLayout.SOUTH);
        
        namizje2.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5));
        
        return namizje2;
    }
    
    //glavno namizje ki vsebuje namizje1 in namizje2
    public JPanel NamizjeP(){
     
        Namizje1P();
        Namizje2P();
        
        namizje.add(namizje1, BorderLayout.NORTH);
        namizje.add(namizje2, BorderLayout.CENTER);
        
        return namizje;
    }
    
    public void BeriIzDatoteke()
    {
        int i = 0;
        
        String vrstica = null; 
        
        try
        {
           BufferedReader datoteka = new BufferedReader(new FileReader("datoteka.txt"));  

           while (datoteka.ready()) {
               while ((vrstica = datoteka.readLine()) != null) {
                   
                   switch (i) {
                       case 0: { n[zap] = vrstica; //shrani vprašanje
                                break;
                            }
                       case 1: { o[zap][i] = vrstica; //shrani prvi odgovor
                                break;
                            }
                       case 2: { o[zap][i] = vrstica; //shrani drugi odgovor
                                break;
                            }
                       case 3: { o[zap][i] = vrstica; //shrani tretji odgovor
                                break;
                            }
                       case 4: { odg[i] = Integer.parseInt(vrstica); //shrani rešitev
                                break;
                            }       
                    }
                   i++;
                   if (i == 5)
                   {
                        i = 0;
                        zap++;
                   }
                 }
            }
            datoteka.close();

           }
           
        catch(IOException e) //če datoteka, ki smo jo klicali za branje ne obstaja
		{
			//System.out.println("Datoteka ne obstaja!");
		}
        
    }
    
    //glavni program okna
    public void main(String[] args) {

        //BeriIzDatoteke();
        
        //oblikujemo applet

        //ustvarimo okno
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame("Reševanje nalog");
        Naloga app = new Naloga();
        
        ZgradiApplet();
                
        // uporabimo drsno površino v primeru premajhnega okna
        JScrollPane pane = new JScrollPane(app.NamizjeP());
        pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
        
        frame.getContentPane().add(pane, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
        
    }
        
    //glavni program appleta
    public  void init() {
        
        Container okno_App = this.getContentPane();


        main(a);
    }
        
    //metoda, ki ugotavlja stanje stikal    
    public void itemStateChanged(ItemEvent event) {

       tekst.setText("");

    }
    
    //metoda ki ugotovi stanje gumbov
    public void actionPerformed(ActionEvent event) {

        if (event.getActionCommand().equals(Preveri_g))  
            if (rgumb[odg[zap]].isSelected())
                tekst.setText("Odgovor je pravilen!");     
            else 
                tekst.setText("Odgovor ni pravilen!");
                
                
        if (event.getActionCommand().equals(Naprej_g))
            if (zap < 3)
            {
                zap++;
                naloga.setText(n[zap]);
                
            }
            else
            {
                zap = 0;
                System.exit(0);
                
            }
        
    }
}

Bojevnik ::

Probaj namesto
BufferedReader datoteka = new BufferedReader(new FileReader("datoteka.txt"));
tole:
BufferedReader datoteka = new BufferedReader(new FileReader(new File("datoteka.txt")));

Lahko pa namesto BufferedReaderja uporabiš Scanner
Scanner datoteka = new Scanner(new File(&quot;datoteka.txt&quot;);

toda če uporabiš Scanner, moraš potem še zamenjati metodo readLine() z nextLine()

Zgodovina sprememb…

  • spremenilo: Bojevnik ()

Bela01 ::

Hm, nič še vedno ne dela. Očitno je da ni v tem problem :((((

Je moja koda sploh logično zapisana?

PaX_MaN ::

Bl ne...

Bela01 ::

In kaj je narobe :D ?

PaX_MaN ::

Da se mi ne da debugat vse skp. :) Evo, metoda za branje, na hitro:
try
{
BufferedReader datoteka = new BufferedReader(new FileReader("datoteka.txt"));

//trije seti vprašanj
for (int j = 0; j < 3; j++)
{
//prebereš vprašanje in ga shraniš
n[j] = datoteka.readLine();

//prebereš možne odgovore in jih shraniš
for (int k = 0; k < 3; k++)
{
//shraniš možne odgovore
o[j][k] = datoteka.readLine();
}
//prebereš še številko pravilnega odgovora
odg[j] = Integer.valueOf(datoteka.readLine());
}

datoteka.close();

}

catch(IOException e) //če datoteka, ki smo jo klicali za branje ne obstaja

{
//System.out.println("Datoteka ne obstaja!");

}

Bela01 ::

Jupiiiii, dela :D.

PaX_MaN ::

Ni problema.

Bela01 ::

Torej programček že skoraj dela. Problem je edino ta, da besedilo, ki je bilo prebrano iz datoteke in potem shranjeno v spremenljivke lahko izpišem v labelah, ki so v appletu. Ne izpiše pa se mi v oknu, ki vsebuje vprašanje in radiobuttone, ... Pa sem v bistvu enako naredila, kot pri oknu appleta. Tudi ko kliknem na gumbek naprej, se nič ne zgodi, tudi slika se ne naloži druga gor, čeprav imam to v zanki v metodi actionPerformed zapisano.
Pa še koda (kar celotna):


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

public class Naloga extends JApplet implements ItemListener, ActionListener {

    String[] a;
    String pres = &quot;    &quot;;
    //vprašanje
    String[] n = new String[3];
    //odgovori
    String[][] o = new String[3][3];
    //točke za pravilne odgovore
    int[] tocke = new int[3];
    //pravilni odgovor
    int[] odg = new int[3];
    
    //zaporedna številka naloge
    int zap = 0;
    
    //Labela s tekstom, nalogo in odgovorom
    JLabel tekst = new JLabel(&quot;&quot;);
    JLabel naloga = new JLabel(&quot;&quot;);
    JLabel odgovor = new JLabel(&quot;&quot;);
    
    private String Preveri_g = &quot;Preveri_g&quot;;
    private String Naprej_g = &quot;Naprej_g&quot;;
    
      
    //ustvarimo gumbe
    JRadioButton[] rgumb = new JRadioButton[3];;  
    JButton preveri, naprej;
    
    //spremenljivka za slikice
    Toolkit tool = Toolkit.getDefaultToolkit();
    Image slika = tool.getImage(&quot;naloga1.jpg&quot;);
    Icon ikona = new ImageIcon(slika);
    JLabel slikaL = new JLabel(ikona);
    
       
    //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, 2));
          
    JLabel izpis = new JLabel(&quot;&quot;);
    JLabel[] gt = new JLabel[3];

    
    //panele za applet
    JPanel applet = new JPanel(new GridLayout(7,1));
    JPanel naslov = new JPanel(new BorderLayout());
    JPanel n_1 = new JPanel(new GridLayout(2,1));
    JPanel n_2 = new JPanel(new GridLayout(2,1));
    JPanel n_3 = new JPanel(new GridLayout(2,1));
    JPanel nal1 = new JPanel(new GridLayout(2,2));
    JPanel nal2 = new JPanel(new GridLayout(2,2));
    JPanel nal3 = new JPanel(new GridLayout(2,2));
    
    //labele za applet
    JLabel[] L1 = new JLabel[2];
    JLabel[] L2 = new JLabel[2];
    JLabel[] L3 = new JLabel[2];
    

    public void Labele() {
        for (int i = 0; i &lt; 2; i++)
        {
            L1[i] = new JLabel(&quot; &quot;);
            L2[i] = new JLabel(&quot; &quot;);
            L3[i] = new JLabel(&quot; &quot;);
        }
    }
    
    public void Oblikuj() {

        applet.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createEtchedBorder()));
        
        naslov.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createEtchedBorder()));
                
        n_1.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createEtchedBorder()));
                
        n_2.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createEtchedBorder()));

        n_3.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createEtchedBorder()));
                
        applet.setPreferredSize(new Dimension(500,500));
        naslov.setPreferredSize(new Dimension(500,20));
        n_1.setPreferredSize(new Dimension(500,60));
        nal1.setPreferredSize(new Dimension(500,40));
        n_2.setPreferredSize(new Dimension(500,60));
        nal2.setPreferredSize(new Dimension(500,40));
        n_3.setPreferredSize(new Dimension(500,60));
        nal3.setPreferredSize(new Dimension(500,40));
    }
    
    public void ZgradiApplet()
    {
        Container app = this.getContentPane();
        
        Oblikuj();
        
        Labele();
        
        naslov.add(new JLabel(&quot;         Rezultati reševanja&quot;));
                
        nal1.add(new JLabel(&quot;         Pravilen odgovor: &quot;));
        nal1.add(L1[0]);
        nal1.add(new JLabel(&quot;         Dosežene točke: &quot;));
        nal1.add(L1[1]);
        
        nal2.add(new JLabel(&quot;         Pravilen odgovor: &quot;));
        nal2.add(L2[0]);
        nal2.add(new JLabel(&quot;         Dosežene točke: &quot;));
        nal2.add(L2[1]);
        
        nal3.add(new JLabel(&quot;         Pravilen odgovor: &quot;));
        nal3.add(L3[0]);
        nal3.add(new JLabel(&quot;         Dosežene točke: &quot;));
        nal3.add(L3[1]);
        
        n_1.add(new JLabel(n[0]));
        n_1.add(nal1);
        n_2.add(new JLabel(n[1]));
        n_2.add(nal2);
        n_3.add(new JLabel(n[2]));
        n_3.add(nal3);

        applet.add(n_1);
        applet.add(n_2);
        applet.add(n_3);
        
        app.add(applet);
        
    }
       

    //Panela z navodilom naloge
    public JPanel NavodiloP(){
        
        navodilo.setPreferredSize(new Dimension(350, 50));
        
        naloga.setText(n[0]);
        
        navodilo.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 0, 5, 0),
                BorderFactory.createEtchedBorder()));
                
        navodilo.add(new JLabel(pres), BorderLayout.WEST);
        navodilo.add(naloga, BorderLayout.CENTER);
        
        return navodilo;
    }
    
    //v grupo dodamo stikala oz. radiobuttone
    void DodajStikala(){
        //grupa, ki bo združila radiobutone - rgumbe, da bodo sodelovali med seboj
        ButtonGroup grupa = new ButtonGroup();
        
        Gumbi();
        
        //ustvarimo rgumbe z možnimi odgovori
        for (int i = 0; i &lt; 3; i++)
        {
            rgumb[i] = new JRadioButton(gt[i].getText());
            if (i != odg[zap])
                rgumb[i].setActionCommand(&quot;NE&quot;);
            else
                rgumb[i].setActionCommand(&quot;DA&quot;);
            rgumb[i].addItemListener(this);
            grupa.add(rgumb[i]);
        }
    }
    
    public void Gumbi() {
        
        for (int i = 0; i &lt; 3; i++)
        {
            gt[i] = new JLabel(o[zap][i]);
        }
    }
    
    //Panela ki vsebuje stikala
    public JPanel OdgovoriP(){
        DodajStikala();
        odgovori.setPreferredSize(new Dimension(200, 250));
        
        odgovori.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createTitledBorder(
                    LineBorder.createGrayLineBorder(),
                    &quot;Možni odgovori&quot;)));
          
        for (int i = 0; i &lt; 3; i++)
        {
            odgovori.add(rgumb[i]);
        }
        
        return odgovori;
    }
    
    //Panela ki vsebuje slike
    public JPanel PrimeriP(){
        
        primeri.setPreferredSize(new Dimension(200, 250));
        
        primeri.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createTitledBorder(
                    LineBorder.createGrayLineBorder(),
                    &quot;Slika kot pomoč&quot;)));
                    
        
        primeri.add(slikaL);
     
        return primeri;
    }
   
    //Panela ki vsebuje paneli odgovori in primeri
    public JPanel NosilnaP(){
        
        OdgovoriP();
        PrimeriP();
        
        nosilna.add(odgovori);
        nosilna.add(primeri);
        
        nosilna.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 0, 5, 0),
                BorderFactory.createEtchedBorder()));

        return nosilna;
    }
    
    //panela ki vsebuje labelo s tekstom
    public JPanel ResitevP(){
        
        resitev.add(izpis);
        resitev.setPreferredSize(new Dimension(350, 50));
        
        resitev.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(1, 0, 1, 0),
                BorderFactory.createEtchedBorder()));
        
        resitev.add(new JLabel(pres), BorderLayout.WEST);
        resitev.add(tekst, BorderLayout.CENTER);
                
        return resitev;
    }
    
    //panela namizje1 vsebuje panele navodilo, nosilna in resitev
    public JPanel Namizje1P(){
        
        NavodiloP();
        NosilnaP();
        ResitevP();
        
        namizje1.add(navodilo, BorderLayout.NORTH);
        namizje1.add(nosilna, BorderLayout.CENTER);
        namizje1.add(resitev, BorderLayout.SOUTH);
        
        namizje1.setBorder(BorderFactory.createEmptyBorder(5, 5, 0, 5));
        
        return namizje1;
    }
    
    //panela ki vsebuje gumba preveri in naprej
    public JPanel GumbiP(){
        
        gumbi.setPreferredSize(new Dimension(350, 50));
        
        gumbi.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(1, 0, 1, 0),
                BorderFactory.createEtchedBorder()));
        
        //ustvarimo in vstavimo v labelo gumba preveri in naprej
        preveri = new JButton(&quot;Preveri&quot;);
        preveri.setActionCommand(Preveri_g);
        preveri.addActionListener(this);
        gumbi.add(preveri);
        naprej = new JButton(&quot;Naprej&quot;);
        naprej.setActionCommand(Naprej_g);
        naprej.addActionListener(this);
        gumbi.add(naprej);
        
        return gumbi;
    }
    
    //panela ki vsebuje gumbe
    public JPanel Namizje2P(){
        
        GumbiP();
        
        namizje2.add(gumbi, BorderLayout.SOUTH);
        
        namizje2.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5));
        
        return namizje2;
    }
    
    //glavno namizje ki vsebuje namizje1 in namizje2
    public JPanel NamizjeP(){
     
        Namizje1P();
        Namizje2P();
        
        namizje.add(namizje1, BorderLayout.NORTH);
        namizje.add(namizje2, BorderLayout.CENTER);
        
        return namizje;
    }
    
    public void BeriIzDatoteke()
    {

        try
        {
           BufferedReader datoteka = new BufferedReader(new FileReader(&quot;datoteka.txt&quot;));

           //trije seti vprašanj
           for (int j = 0; j &lt; 3; j++)
           {
               //prebereš vprašanje in ga shraniš
               n[j] = datoteka.readLine();

               //prebereš možne odgovore in jih shraniš
               for (int k = 0; k &lt; 3; k++)
               {
                    //shraniš možne odgovore
                    o[j][k] = datoteka.readLine();
                }
                //prebereš še številko pravilnega odgovora
                odg[j] = Integer.parseInt(datoteka.readLine());
            }

            datoteka.close();
        }
        catch(IOException e) //če datoteka, ki smo jo klicali za branje ne obstaja
		{
			//System.out.println(&quot;Datoteka ne obstaja!&quot;);
		}
		
		zap = 0;
        
    }
    
    //glavni program okna
    public void main(String[] args) {

        BeriIzDatoteke();
        
        //oblikujemo applet
        ZgradiApplet();
        
        
        
        //ustvarimo okno
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame(&quot;Reševanje nalog&quot;);
        Naloga app = new Naloga();
        
                        
        // uporabimo drsno površino v primeru premajhnega okna
        JScrollPane pane = new JScrollPane(app.NamizjeP());
        pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
        
        frame.getContentPane().add(pane, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
        
        
        
    }
        
    //glavni program appleta
    public void init() {
        
        Container okno_App = this.getContentPane();

        main(a);
    }
        
    //metoda, ki ugotavlja stanje stikal    
    public void itemStateChanged(ItemEvent event) {

       tekst.setText(&quot;&quot;);

    }
    
    //metoda ki ugotovi stanje gumbov
    public void actionPerformed(ActionEvent event) {

        if (event.getActionCommand().equals(Preveri_g))  
            if (rgumb[odg[zap]].isSelected())
                tekst.setText(&quot;Odgovor je pravilen!&quot;);     
            else 
                tekst.setText(&quot;Odgovor ni pravilen!&quot;);
                
                
        if (event.getActionCommand().equals(Naprej_g))
            if (zap &lt; 3)
            {
                zap++;
                naloga.setText(n[zap]);
                
                for (int i = 0; i &lt; 3; i++)
                    gt[i].setText(o[zap][i]);
                
                if (zap == 1)
                {
                    slika = tool.getImage(&quot;naloga2.jpg&quot;);
                    ikona = new ImageIcon(slika);
                    slikaL = new JLabel(ikona);
                }
                else if (zap == 2)
                {
                    slika = tool.getImage(&quot;naloga3.jpg&quot;);
                    ikona = new ImageIcon(slika);
                    slikaL = new JLabel(ikona);
                }
                
            }
            else
            {
                zap = 0;
                System.exit(0);
                
            }
        
    }
}

Zgodovina sprememb…

  • spremenila: Bela01 ()

PaX_MaN ::

V metodi main spremeni teli vrstici:

Naloga app = new Naloga();
v
// Naloga app = new Naloga();

in

JScrollPane pane = new JScrollPane(app.NamizjeP());
v
JScrollPane pane = new JScrollPane(NamizjeP());

Kar si prej naredila je, da si naredila nov objekt Naloga in na njem izvršila metodo NamizjeP(), namesto da bi jo izvršila na trenutnem objektu.

EDIT: V metodo actionPerformed(...) dodaj za klicem naloga.setText(n[zap]); še tole:

for (int i = 0; i < rgumb.length; i++)
{
rgumb[i].setText(o[zap][i]);
}

Zgodovina sprememb…

  • spremenilo: PaX_MaN ()

Bela01 ::

Zanimivo. Tako je pisalo v knjigi, pa sem mislila, da more tak bit. Nisem se niti vprašala zakaj je tak. No super ;).

Hvala vsem skupaj.


Vredno ogleda ...

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

[java]problem z Throws

Oddelek: Programiranje
221503 (1032) killa bee
»

[Java] Ne zažene appleta

Oddelek: Programiranje
51137 (1070) iggy
»

[Java] Zagon appleta v HTML

Oddelek: Programiranje
161442 (1264) Bela01
»

[Java]Vprašanja

Oddelek: Programiranje
242030 (1498) Bela01
»

[Java] Deljenje in ostanek

Oddelek: Programiranje
142917 (2501) pr2501

Več podobnih tem