Sada je: 28 ožu 2024, 09:22.
C, C++, Java, PHP, Ruby...

Moderator/ica: Moderatori/ce

Pravila foruma
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
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.
Postovi: 12
Postovi: 12
Pridružen/a: 18 lip 2014, 19:04
Podijelio/la zahvalu: 0 puta
Primio/la zahvalu: 0 puta
Spol: m
OS: Windows
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)
stefan je napisao/la:tu mač gemišta

To understand recursion, you must first understand recursion.
Avatar
Postovi: 1536
Postovi: 1536
Pridružen/a: 22 tra 2012, 08:55
Lokacija: ForHill Croatia
Podijelio/la zahvalu: 20 puta
Primio/la zahvalu: 26 puta
Spol: M
OS: eOS Luna
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.
Postovi: 12
Postovi: 12
Pridružen/a: 18 lip 2014, 19:04
Podijelio/la zahvalu: 0 puta
Primio/la zahvalu: 0 puta
Spol: m
OS: Windows
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.
stefan je napisao/la:tu mač gemišta

To understand recursion, you must first understand recursion.
Avatar
Postovi: 1536
Postovi: 1536
Pridružen/a: 22 tra 2012, 08:55
Lokacija: ForHill Croatia
Podijelio/la zahvalu: 20 puta
Primio/la zahvalu: 26 puta
Spol: M
OS: eOS Luna
Hvala ti ,puno si mi pomogao :)
Postovi: 12
Postovi: 12
Pridružen/a: 18 lip 2014, 19:04
Podijelio/la zahvalu: 0 puta
Primio/la zahvalu: 0 puta
Spol: m
OS: Windows

Na mreži
Trenutno korisnika/ca: / i 7 gostiju.