Stringhe in JTextArea

di il
6 risposte

Stringhe in JTextArea

Salve, vorrei visualizzare delle stringhe presa da un file su una textarea, ma ogni volta non riesco a visualizzarle correttamente.
Nella textarea viene stampato il titolo del libro ma se riavvio, stampa di nuovo il titolo del libro precedente
Codici
Libreria.java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;

public class Libreria 
{
    public static void main (String argv[]) throws FileNotFoundException, IOException
    {
        //Input
        GregorianCalendar gc = new GregorianCalendar(); //rileva data 
        int mese= gc.get(Calendar.MONTH);
        mese++;
        String sMese= String.valueOf(mese); //get e conv mese
        String sAnno = String.valueOf(gc.get(Calendar.YEAR)); // get e conv anno
        String sGiorno = String.valueOf(gc.get(Calendar.DAY_OF_MONTH)); //get e conv giorno 
        JFrame f = new JFrame ("Gestione biblioteca");
        JPanel p = new JPanel ();
        JPanel txt = new JPanel ();
        JPanel arGr= new JPanel ();
        JPanel pann=new JPanel ();
        JLabel disp = new JLabel ("Disponibili: ");
        JButton ord = new JButton (" Ordina ");
        JButton cover = new JButton (" Copertina ");
        JLabel img=new JLabel();
        JLabel dataDiScadenza = new JLabel ("Data di scadenza(gg/mm/aaaa): ");
        JButton est = new JButton (" Estendi data ");
        JButton ordinati= new JButton (" Visualizza ordini effettuati ");
        JTextField month = new JTextField (sMese, 2); //Textfield per il mese
        JTextField year = new JTextField (sAnno, 4); //TextField per l'anno 
        JTextField day = new JTextField (sGiorno, 2); // textfield per il giorno
        JComboBox libri = new JComboBox();
        JTextArea txtOrd = new JTextArea(10,10);
        //Costruttore
        GestorePulsanti gest = new GestorePulsanti (sMese,sAnno,sGiorno, libri,txtOrd); //gestorepulsanti
        //Pannello
        txt.add(dataDiScadenza);txt.add(day); txt.add(month); txt.add(year); txt.add(est);
        month.setEditable(true); day.setEditable(true); year.setEditable(false);
        p.setLayout(new BorderLayout());
        
        p.add(img, "Center");
        p.add(txt, "East");
        p.add(disp, "West");
        //apertura file
        FileReader file = new FileReader ("libri.txt");
        BufferedReader fIN = new BufferedReader (file);
        String stringa = fIN.readLine();
        while (stringa != null)
        {
            stringa=fIN.readLine();
            libri.addItem(stringa);
            p.add(libri);
        }
        file.close(); //chiusura file 
        
        p.add(ord, "West");
        ord.addActionListener(gest);
        est.addActionListener(gest);
        ordinati.addActionListener(gest);
        
        pann.add(ordinati, "West");
        pann.add(txtOrd, "East");
        p.add(pann,"South");
        
        f.getContentPane().add(p);
        f.pack();
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
GestorePulsanti.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;



public class GestorePulsanti implements ActionListener{
    private String letto;
    private JTextArea txtOrd = new JTextArea ();
    private String sMese;
    private String sAnno;
    private String sGiorno;
    private JComboBox libri;
    private JComboBox ordinazioni;
    GestorePulsanti(String sMese, String sAnno, String sGiorno, JComboBox libri, JTextArea letto) 
    { 
            this.sMese=sMese;
            this.sAnno=sAnno;
            this.sGiorno=sGiorno;
            this.libri=libri;
            this.txtOrd=letto;
    }

    public void actionPerformed(ActionEvent e)
    {
        String azione=e.getActionCommand();
        if (azione.equals(" Ordina ")) 
        {
            int hhh;
            hhh = JOptionPane.showConfirmDialog(null,
            "Sei sicuro di voler ordinare?"+ " "+libri.getSelectedItem(),
            "Ordine",
            JOptionPane.YES_NO_OPTION);
                if ( hhh == JOptionPane.YES_OPTION)
                {
                    try
                    { 
                        FileWriter fileOut = new FileWriter ("libriOrdinati.txt",true);
                        PrintWriter fOUT = new PrintWriter (fileOut);
                        fOUT.println(""+libri.getSelectedItem());
                        fOUT.flush();
                        fileOut.close();
                    } 
                    catch (IOException ex)
                    {
                        JOptionPane.showMessageDialog(null,
                            "File di scrittura non aprto",
                            "Errore",
                            JOptionPane.ERROR_MESSAGE);
                    }
                    
                            JOptionPane.showMessageDialog(null,
                            "Ordine confermato",
                            "Hai Ordinato:"+ " "+libri.getSelectedItem(),
                            JOptionPane.INFORMATION_MESSAGE);
                            
                }
                
        }
        else if (azione.equals(" Estendi data "))
        {
           
            String messaggio = "Nuova data: "+sGiorno+"/"+sMese+"/"+sAnno;
            JOptionPane.showMessageDialog(null,
                    messaggio,
                    "Conferma",
                    JOptionPane.INFORMATION_MESSAGE);
        }
        
        
        
        else 
    if (azione.equals(" Visualizza ordini effettuati ")) 
        {
           
            try
            {
            
            FileReader file = new FileReader ("libriOrdinati.txt");
            BufferedReader fIN = new BufferedReader (file);
            String text = "",lettura="";
            while((lettura = fIN.readLine()) != null) 
            {
                        text += lettura; 
                         txtOrd.append(text+"\n");
}
                file.close(); 
                txtOrd.setVisible(true);
            
        }
            catch (IOException ie)
            {
                
            }
        }
            

    }
}


6 Risposte

  • Re: Stringhe in JTextArea

    Che disordine!!!
    Stai mettendo insieme un JFrame (fra l'altro dentro il main) e un Japplet nell'altro file.
    O usi un JFrame o usi un Japplet, le due cose si escludono a vicenda.
    Inoltre se usi un Applet non esiste il main method bensi "init", "start" e "stop".

    Mi sa che ancora hai un bel pò da studiare....
  • Re: Stringhe in JTextArea

    schumy2000 ha scritto:


    Che disordine!!!
    Stai mettendo insieme un JFrame (fra l'altro dentro il main) e un Japplet nell'altro file.
    O usi un JFrame o usi un Japplet, le due cose si escludono a vicenda.
    Inoltre se usi un Applet non esiste il main method bensi "init", "start" e "stop".

    Mi sa che ancora hai un bel pò da studiare....
    L'extends JApplet è un errore di trascrizione, non lo utilizzo
  • Re: Stringhe in JTextArea

    E allora posta il codice corretto....
  • Re: Stringhe in JTextArea

    Aggiornato...
  • Re: Stringhe in JTextArea

    FDG2801 ha scritto:


    aggiornato...
    Rispondo ora velocemente (in questi giorni purtroppo ho poco tempo). Il codice non va granché bene, per questioni più che altro di "design" delle classi. Hai fatto una classe GestorePulsanti che è un ActionListener ma che fa di tutto e di più.

    Già il fatto di usare degli action command che sono delle frasi es. " Visualizza ordini effettuati " è dubbio e perlomeno molto inusuale (e oltretutto scritto così è altamente error-prone, se dove assegni gli action command cambi un pochino la frase e ti dimentichi di aggiornarla in GestorePulsanti ... non ti funziona più).

    Poi comunque il codice fa molte (troppe) cose: a) richieste di conferma verso l'utente, b) I/O su file (e tra l'altro nemmeno in modo correttissimo al 100% riguardo i close), c) gestione delle eccezioni, d) visualizzazione degli errori.

    Così non si va molto lontano ...
  • Re: Stringhe in JTextArea

    andbin ha scritto:


    FDG2801 ha scritto:


    aggiornato...
    Rispondo ora velocemente (in questi giorni purtroppo ho poco tempo). Il codice non va granché bene, per questioni più che altro di "design" delle classi. Hai fatto una classe GestorePulsanti che è un ActionListener ma che fa di tutto e di più.

    Già il fatto di usare degli action command che sono delle frasi es. " Visualizza ordini effettuati " è dubbio e perlomeno molto inusuale (e oltretutto scritto così è altamente error-prone, se dove assegni gli action command cambi un pochino la frase e ti dimentichi di aggiornarla in GestorePulsanti ... non ti funziona più).

    Poi comunque il codice fa molte (troppe) cose: a) richieste di conferma verso l'utente, b) I/O su file (e tra l'altro nemmeno in modo correttissimo al 100% riguardo i close), c) gestione delle eccezioni, d) visualizzazione degli errori.

    Così non si va molto lontano ...
    Onestamente questa è solo una prima versione, sto cercando di capire come posso ordinare meglio a fasi, e poi ordinare il completo programma
Devi accedere o registrarti per scrivere nel forum
6 risposte