Stranica: 1/1.

[Java] Java pomoc oko klasa

Postano: 18 lip 2014, 19:09
Postao/la MarkoN
Napravio sam neki mini projekat,ali mi treba iz vise klasa dok sam ja sve pisao u jednoj,pokusao sam da ih razdvojim u vise klasa,ali mi tada projekat ne radi kako treba.AKo neko moze da mi pomogne kako da ih razdvojim na vise klasa.Evo moj kod:

Kod: Označi sve

 
public class Projektni extends JFrame {
    public final JTextField ime = new JTextField(10);
    public final JTextField prezime = new JTextField(10);
    public final JTextField index = new JTextField(10);
    public DefaultListModel podaci = new DefaultListModel();
    public JList lista = new JList(podaci);

    public Projektni()
    {
    JPanel panel=new JPanel (new GridLayout(6, 7));
panel.add(new JLabel("Ime studenta:"));
panel.add(ime);
panel.add(new JLabel("Prezime studenta:"));
panel.add(prezime);
panel.add(new JLabel("Broj indeksa studenta:"));
panel.add(index);

String[] seminari = {"Microsoft","MAC","Java"};
final JComboBox cek = new JComboBox(seminari);
panel.add(cek);

JButton upisibtn=new JButton("Upisi");
upisibtn.addActionListener(new ActionListener()
{
  @Override
  public void actionPerformed(ActionEvent e)
  {
   String s=ime.getText()+" "+prezime.getText()+" "+index.getText()+" "+cek.getSelectedItem()+"\n";
   upisi(s);
  }
});
JButton citajbtn=new JButton("Prikazi");
citajbtn.addActionListener(new ActionListener()
{
  @Override
  public void actionPerformed(ActionEvent e)
  {
   for(String s:citaj())
   podaci.addElement(s);
  
  }
});

panel.add(upisibtn);
panel.add(citajbtn);
add(panel,BorderLayout.CENTER);
panel.add(lista);

            }

public static void upisi(String s){
try{
  // Create file 
  FileWriter fstream = new FileWriter("out.txt",true);
  BufferedWriter out = new BufferedWriter(fstream);
  out.write(s);
  //Close the output stream
  out.close();
  }catch (Exception e){//Catch exception if any
  System.err.println("Error: " + e.getMessage());
  }}
public ArrayList<String> citaj(){
        ArrayList<String> p=new ArrayList<String>();

try{
   
    FileReader fstream = new FileReader("out.txt");
  BufferedReader out = new BufferedReader(fstream);
 String line = out.readLine();

        while (line != null) {
            line = out.readLine();
            p.add(line);
        }
  out.close();
  return p;
  }catch (Exception e){
  System.err.println("Error: " + e.getMessage());
  return p;
  }
}
    public static void main(String[] args) {
        JFrame frame = new Projektni();
        

    frame.setSize(500, 500);
    frame.setLocationRelativeTo(null); 
    frame.setTitle("Seminari");
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
    
    }


    }
Moderator je uredio post. Molimo da ispis koda prilažete unutar Code tagova.

Re: [Java] Java pomoc oko klasa

Postano: 19 lip 2014, 00:01
Postao/la Medojedni jazavac
Prvo ne vidim kaj tocno hoces promestit u vise klasa? Daj malo pojasni kaj tocno zelis izdvojit.

Drugo, frame iz mejna se ne bi trebal pokretat tak vec ovako:

Kod: Označi sve

public static void main(String[] args) {
    java.awt.EventQueue.invokeLater(new Runnable() {
          public void run() {
               Projektni frame = new Projektni();
               frame.setVisible(true);
          }
    });
}
Razlog tome je sto u tvom slucaju se moze desit da neke dretve ostanu radit nakon zatvaranja prozora koje nisu daemon dretve (deamon dretve u kontekstu java virtualnog stroja) i program se unatoc ocekivanom nece ugasiti (ostat ce raditi proces)

Re: [Java] Java pomoc oko klasa

Postano: 19 lip 2014, 11:00
Postao/la MarkoN
Hvala na odgovoru,ne znam,mislio sam da ove dve metode citaj i pisi prebacim u posebno klasu ali onda imam problem kod:
upisi(s);for(String s:citaj())
podaci.addElement(s);
ako ih prebacim u drugu klasu ne znam kako to mogu da eliminisem.

Re: [Java] Java pomoc oko klasa

Postano: 20 lip 2014, 20:40
Postao/la Medojedni jazavac
Oprosti nisam imal vremena prije pogledat.

Pa evo, napravio bi to ovak. S obzirom da te dvje metode imaju logiku neovisnu o GUIju lagano se mogu refaktorirati u zasebni staticki razred.

Npr ovako:

Kod: Označi sve

class Zapis {
    public static void upisi(String s) {
		try {
			// Create file
			FileWriter fstream = new FileWriter("out.txt", true);
			BufferedWriter out = new BufferedWriter(fstream);
			out.write(s);
			// Close the output stream
			out.close();
		} catch (Exception e) {// Catch exception if any
			System.err.println("Error: " + e.getMessage());
		}
	}

	public static ArrayList<String> citaj() {
		ArrayList<String> p = new ArrayList<String>();

		try {

			FileReader fstream = new FileReader("out.txt");
			BufferedReader out = new BufferedReader(fstream);
			String line = out.readLine();

			while (line != null) {
				line = out.readLine();
				p.add(line);
			}
			out.close();
			return p;
		} catch (Exception e) {
			System.err.println("Error: " + e.getMessage());
			return p;
		}
	}
}
A ovaj dio koji te muci moras napraviti tak da pozivas staticke metode iz tog razreda. Staticke metode su metode samog razreda, a ne stvorenog objekta stoga niti ne treba stvarati novi objekt vec se one pozivaju na nacin:

Kod: Označi sve

ImeRazreda.ImeStatickeMetode()
A u tom primjeru bi to onda bilo:

Kod: Označi sve

for (String s : Zapis.citaj())
    podaci.addElement(s);
Analogno tome bi napravio sa metodom upisi.

Mislim da sam tek sad na kraju ovog posta skuzil kaj te je ustvari primarno mucilo. Nisi deklariral metodu citaj staticnom. Primjeti da u mojoj klasi je deklariran staticno.

Re: [Java] Java pomoc oko klasa

Postano: 23 lip 2014, 17:39
Postao/la MarkoN
Hvala ti ,puno si mi pomogao :)