Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 31

Discussione: JScrollPane()

  1. #1

    JScrollPane()

    Devo creare un JScrollPane()... al momento ho una JTextArea() e funziona. se però inserisco il JScrollPane() e vado a richiamarlo per poter fare uscire i dati inseriti mi dà un errore su questa linea:
    codice:

    codice:
    
    
    codice:
    textArea.setText("NOME: " + nomePersona + "\nCOGNOME: " + cognomePersona
                              + "\nIndirizzo: " + indirizzoPersona + "\nNum. tel.: " + numeroPersona);
    
    il .setText è invalido per questo tipo di comando ed infatti è vero. cosa posso usare? c'è un modo?
    grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Io non ho capito assolutamente nulla.

    1) Cosa vuol dire "se però inserisco il JScrollaPane"? Lo inserisci dove? In che modo?
    2) Cosa vuol dire "Vado a richiamarlo per poter fare uscire i dati inseriti"? Richiamare in che modo? Quali dati devono "uscire"? E dove devono uscire? E cosa vuol dire che devono uscire?
    3) Il codice postato mostra solo una chiamata a setText() su una textArea (si presume sia una JTextArea)... il ché non è sbagliato e funziona tranquillamente. Quindi, cosa vuol dire che il setText è invalido? E, soprattutto, cosa vuol dire "per questo tipo di comando"?

    Insomma... rispiega con parole tue quello che vuoi fare e mostra esattamente cosa hai fatto.

    Se il tuo intento è aggiungere un JScrollPane alla JTextArea è sufficiente usarne il normalissimo costruttore:

    codice:
    // Creo la JTextArea
    textArea = new JTextArea();
    
    // Creo il JScrollPane
    scrollPane = new JScrollPane( textArea );
    
    // Nel contenitore aggiungerò il JScrollPane (che contiene la JTextArea)
    add(scrollPane, BorderLayout.CENTER);
    
    // Continuo a usare la JTextArea (che è contenuta nel JScrollPane)
    textArea.setText( ... );

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    ho creato una rubrica. inserendo il cognome da input mi restituisce tutti i dati dell'utente con quel cognome. il problema è che se io ho più utenti con lo stesso cognome mi restituisce solo l'ultimo(ho una JTextArea). penso sia dovuto al fatto che crea una sovrascrittura. ho pensato che potrebbe andare bene un JScrolPane() , ma per questo chiedo consiglio a voi, grazie.

    spero di essere stato chiaro.


    codice:
    richiamaDati.addActionListener(event -> {
                          String ilCognome = datiRich.getText();
                          try {
                              Object[] risultato = Visualizzare.visualizza(ilCognome);
                              Object nomePersona = risultato[0];
                              Object cognomePersona = risultato[1];
                              Object indirizzoPersona = risultato[2];
                              Object numeroPersona = risultato[3];
                              textArea.setText("NOME: " + nomePersona + "\nCOGNOME: " + cognomePersona 
                              + "\nIndirizzo: " + indirizzoPersona + "\nNum. tel.: " + numeroPersona);
                          }
                          catch(SQLException | ClassNotFoundException exc) {
                              exc.printStackTrace();
                          }                                                        
                 });
    

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Ok, è ora già più chiaro.

    Se ogni volta usi il metodo setText() ovviamente vai a sostituire l'attuale contenuto della JTextArea con il nuovo testo. Quello che vuoi fare tu, probabilmente, è appendere ulteriore testo alla JTextArea.

    Per fare questo c'è il metodo append():


    codice:
    // textArea ora è vuota
    textArea.append("Prima riga\n"); // Ora contiene la prima riga, ci aggiungo dell'altro
    textArea.append("Seconda riga\n");   // Ora ci sono 2 righe
    textArea.append("Terza riga\n");   // Ora ce ne sono 3...

    Tieni sempre sotto mano la documentazione delle classi che stai usando.


    Ciao.
    Ultima modifica di LeleFT; 06-02-2015 a 14:42
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    si proprio questo voglio...ora ci provo..infatti con scrollPane() non funziona. comunque grazie del consiglio ne terrò conto e guarderò molto la documentazione...

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    JScrollPanel non c'entra nulla... lui si occupa solo di scrollare un componente che ha del contenuto più grande di quello che può essere visibile. Ciò che cambia è, quindi, il contenuto del componente incluso nel JScrollPane...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    il problema è che giustamente mi dà sempre lo stesso utente ma io voglio con lo stesso cognome e nome diverso... nell'esercizio senza grafico lavorando in console mi restituisce il giusto funzionando.perchè qui no?

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Beh... dal codice che hai postato tu stai solo appendendo i dati di una sola persona.
    Non ho idea di come funzioni il tuo codice (in particolare, cosa faccia quel Visualizzare.visualizza(ilCognome); ), ma mi aspetterei almeno un for da qualche parte che scorra un array (o una lista) di risultati...
    Se l'esecuzione in console funziona, dovresti "emularla" anche di qua... al posto di System.out.println ci metti textArea.append() ed il gioco è fatto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    credo che il problema sia qui. c'è un array e credo che devo applicare un ciclo for.

    codice:
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    
        public class Visualizzare {
    
    
            public static Object[] visualizza(String nomeInserito) throws ClassNotFoundException, SQLException {
                String driver = "com.mysql.jdbc.Driver";
                Class.forName(driver);
                String url = "jdbc:mysql://localhost:3306/Rubrica";
                Connection con = DriverManager.getConnection(url,"*****","******");
                Statement cmd = con.createStatement();
                String qry = "SELECT nome, cognome, indirizzo, telefono FROM new_table WHERE cognome=" + "'" + nomeInserito + "'" ;
                ResultSet res = cmd.executeQuery(qry);
                Object[] array = new Object[4];
    
                if (!(res.equals(""))) {
                    while (res.next()) {
                        array[0] = res.getString("nome");
                        array[1] = res.getString("cognome");
                        array[2] = res.getString("indirizzo");
                        array[3] = res.getString("telefono");
    
                    }
    
                }else if (!(res.first())) {
    array[0] = "utente non trovato";
                    array[1] = "";
                    array[2] = "";
                    array[3] = "";
    //System.out.println("nome non presente nella rubrica");
    
                }
    returnarray;
            }
        }

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Beh, sì... il metodo visualizza() è sbagliato.
    Siccome i dati di una sola persona tu li inserisci all'interno di un array di Object, il metodo, che dovrebbe poter restituire più di un dato, non può restituire un Object[]... dovrà per forza di cose restituire un Object[][] oppure un List<Object[]>.

    Quindi, la firma di quel metodo va cambiata e, di conseguenza, anche la logica interna del metodo.

    In secondo luogo, il ciclo while() va benissimo per scorrere il ResultSet, ma dentro non puoi andare ogni volta a sostituire i dati:

    codice:
    while (res.next()) {
       array[0] = res.getString("nome");
       array[1] = res.getString("cognome");
       array[2] = res.getString("indirizzo");
       array[3] = res.getString("telefono");
    }

    Ad ogni cilo (cioè ad ogni record) vai a sostituire i dati del record letto precedentemente con quelli del nuovo record. In pratica, ad ogni cilo butti via i dati del record precedente.

    No: li devi salvare da qualche parte.

    Scegli tu quale soluzione adottare: se vuoi restituire un array di array dovrai sapere fin da subito quanti record sono stati letti per poter dimensionare l'array; se scegli di restituire un List<Object[]> non hai questa necessità perchè tutte le collezioni sono auto-espandibili.


    Ciao.
    Ultima modifica di LeleFT; 06-02-2015 a 16:03
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.