Forum » Programiranje » [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:
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
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 ()
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 ::
Splošnejše branje datoteke (primer kopiranja datoteke):
Deluje tudi z netekstovnimi datotekami.
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.
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?
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(); } ...
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…
- spremenil: Tutankhamun ()
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.
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.
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.
//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.
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 ::
Š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:
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
toda če uporabiš Scanner, moraš potem še zamenjati metodo readLine() z nextLine()
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("datoteka.txt");
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?
Je moja koda sploh logično zapisana?
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!");
}
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 ::
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):
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 = " "; //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"); 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(""); 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 < 2; i++) { L1[i] = new JLabel(" "); L2[i] = new JLabel(" "); L3[i] = new JLabel(" "); } } 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(" Rezultati reševanja")); nal1.add(new JLabel(" Pravilen odgovor: ")); nal1.add(L1[0]); nal1.add(new JLabel(" Dosežene točke: ")); nal1.add(L1[1]); nal2.add(new JLabel(" Pravilen odgovor: ")); nal2.add(L2[0]); nal2.add(new JLabel(" Dosežene točke: ")); nal2.add(L2[1]); nal3.add(new JLabel(" Pravilen odgovor: ")); nal3.add(L3[0]); nal3.add(new JLabel(" Dosežene točke: ")); 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 < 3; i++) { rgumb[i] = new JRadioButton(gt[i].getText()); if (i != odg[zap]) rgumb[i].setActionCommand("NE"); else rgumb[i].setActionCommand("DA"); rgumb[i].addItemListener(this); grupa.add(rgumb[i]); } } public void Gumbi() { for (int i = 0; i < 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(), "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č"))); 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("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() { 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.parseInt(datoteka.readLine()); } datoteka.close(); } catch(IOException e) //če datoteka, ki smo jo klicali za branje ne obstaja { //System.out.println("Datoteka ne obstaja!"); } zap = 0; } //glavni program okna public void main(String[] args) { BeriIzDatoteke(); //oblikujemo applet ZgradiApplet(); //ustvarimo okno JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("Reševanje nalog"); 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(""); } //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]); for (int i = 0; i < 3; i++) gt[i].setText(o[zap][i]); if (zap == 1) { slika = tool.getImage("naloga2.jpg"); ikona = new ImageIcon(slika); slikaL = new JLabel(ikona); } else if (zap == 2) { slika = tool.getImage("naloga3.jpg"); 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]);
}
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.
Hvala vsem skupaj.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [java]problem z ThrowsOddelek: Programiranje | 1599 (1128) | killa bee |
» | [Java] Ne zažene appletaOddelek: Programiranje | 1205 (1138) | iggy |
» | [Java] Zagon appleta v HTMLOddelek: Programiranje | 1537 (1359) | Bela01 |
» | [Java]VprašanjaOddelek: Programiranje | 2103 (1571) | Bela01 |
» | [Java] Deljenje in ostanekOddelek: Programiranje | 3079 (2663) | pr2501 |