Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Associare JScrollBar a JList

    Ciao a tutti! Ho un piccolo problema.
    Ho una JList i cui elementi sono 138 stringhe (o meglio char[]) e voglio rappresentarli verticalmente.
    Inizialmente mostro i primi elementi della JList, e vorrei poter dare la possibilità di consultare i restanti elementi non visibili all'inizio con una scrollbar.
    Ho creato un oggetto di tipo JScrollBar ma oltre a crearmi fisicamente l'oggetto esso non mi permette di scendere e salire nella lista, anche perché il knob (il cursore della scrollbar) non appare.
    Inoltre ho utilizzato il metodo ensureIndexIsVisible per permettere almeno di visualizzare gli altri elementi semplicemente scendendo tra esse con la freccia in basso della tastiere, senza però ottenere alcun esito.
    Mi serve il vostro aiuto
    Vi posto il frammento di codice relativo al mio problema.

    codice:
            //list omocodia     
            final JList omocodia = new JList();
            omocodia.setSize(200, 200);
            omocodia.setLocation(10, 340);
            omocodia.setVisible(true);
            omocodia.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
            omocodia.setLayoutOrientation(JList.HORIZONTAL_WRAP);
            omocodia.setVisibleRowCount(-1);
            omocodia.setAutoscrolls(true);
            
            //scrollbar per list
            final JScrollPane scroll = new JScrollPane(omocodia, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
            scroll.setVisible(true);
            scroll.setEnabled(true);
            scroll.setLocation(210, 340);
            scroll.setSize(20,200);
            scroll.setPreferredSize(new Dimension(20,20));
            
            //listener omocodia
            ListSelectionListener listenerlist = new ListSelectionListener()
            {
                    public void valueChanged(ListSelectionEvent e)
                    {
                         omocodia.ensureIndexIsVisible(omocodia.getSelectedIndex());            
                    }
            };

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da microprocessore Visualizza il messaggio
    Ho creato un oggetto di tipo JScrollBar ma oltre a crearmi fisicamente l'oggetto esso non mi permette di scendere e salire nella lista, anche perché il knob (il cursore della scrollbar) non appare.
    Inoltre ho utilizzato il metodo ensureIndexIsVisible per permettere almeno di visualizzare gli altri elementi semplicemente scendendo tra esse con la freccia in basso della tastiere, senza però ottenere alcun esito.
    Quello che stavi cercando di fare, direttamente con JScrollBar, non serve ed è solo laborioso. Swing ha un componente apposito, si chiama JScrollPane. I componenti potenzialmente "grandi" come JTextArea, JList, JTable (e altri) si mettono come "view" nel JScrollPane. Ed è poi JScrollPane (non più il tuo componente) che va aggiunto nel tuo "layout".

    codice:
    JScrollPane scrollPane = new JScrollPane(tuoJList);
    
    xyz.add(scrollPane);
    Tutto qui. Le due scrollbar, verticale ed orizzontale, compaiono quando necessarie e funzionano appropriatamente.

    (nota: ho risposto così perché prima ho letto di JScrollBar, poi solo dopo ho visto il codice dove usi già JScrollPane).

    Quote Originariamente inviata da microprocessore Visualizza il messaggio
    Inoltre ho utilizzato il metodo ensureIndexIsVisible per permettere almeno di visualizzare gli altri elementi semplicemente scendendo tra esse con la freccia in basso della tastiere, senza però ottenere alcun esito.
    Si vede l'implementazione di ListSelectionListener ma non si vede la registrazione. L'hai registrato sul JList?



    P.S.
    Le righe
    omocodia.setVisible(true);
    scroll.setVisible(true);
    scroll.setEnabled(true);

    non servono: i componenti sono già "di serie" visibili e enabled.

    La riga:
    scroll.setPreferredSize(new Dimension(20,20));

    non ti serve. Anche se non hai mostrato il resto, deduco che stai usando il posizionamento "assoluto" (stai posizionando/dimensionando esplicitamente i componenti), ovvero hai tolto il layout manager dal contenitore dove inserisci 'omocodia'. In tal caso setPreferredSize è inutile, questo serve con i layout manager.
    Ultima modifica di andbin; 23-11-2013 a 16:18
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Sì, ho scritto JScrollBar ma invendevo JScrollPane. Comunque sì, ho aggiunto il listener dall'altra parte del codice e mi era sfuggito.
    codice:
    omocodia.addListSelectionListener(listenerlist);
    E sì sto posizionando i vari oggetti in posizioni ben precise.

    Ad ogni modo, cosa manca per far funzionare lo "scrollamento" della list?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da microprocessore Visualizza il messaggio
    Ad ogni modo, cosa manca per far funzionare lo "scrollamento" della list?
    Un JList dentro JScrollPane non richiede nulla (e ripeto nulla) in più per lo scrolling, è tutto già automatico. Nemmeno l'uso ensureIndexIsVisible (che a questo punto mi sfugge perché ti serve o credi ti serva).

    Metti semplicemente JList come "view" di JScrollPane e poi è JScrollPane che lo devi aggiungere nel contenitore.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    il fatto è che l'uso della scrollbar non fa nessun effetto. come metto la jlist come "view" della jscrollpane?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da microprocessore Visualizza il messaggio
    come metto la jlist come "view" della jscrollpane?
    È già questo:
    new JScrollPane(omocodia, .......)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da microprocessore Visualizza il messaggio
    il fatto è che l'uso della scrollbar non fa nessun effetto.
    Ripeto ancora una volta (la 3a ma nessun problema ) che posizionare/dimensionare il JList non serve, non è JList che devi mettere nel tuo "contenitore" (qualunque cosa sia).
    Una volta che metti JList nel JScrollPane, è JScrollPane che gestisce posizione/dimensione/scrolling del JList tutto in automatico. E ripeto ancora: è JScrollPane che devi aggiungere nel tuo contenitore.

    xyz.add(scroll); // SI

    xyz.add(omocodia); // NO
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    il mio contenitore è una JLaber di nome background.
    avevo già aggiunto a background sia la scrollbar che la list.
    codice:
    	background.add(omocodia);		background.add(scroll);
    se commento la prima delle due righe vedo il cursore di scroll, ed è utilizzabile.
    però la list finiva per scomparire.
    ho risolto cancellando la riga in cui definivo sia le dimensioni che la posizione della list.

    Ottimo, ti ringrazio!

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da microprocessore Visualizza il messaggio
    il mio contenitore è una JLaber di nome background.
    avevo già aggiunto a background sia la scrollbar che la list.
    codice:
    	background.add(omocodia);		background.add(scroll);
    se commento la prima delle due righe vedo il cursore di scroll, ed è utilizzabile.
    però la list finiva per scomparire.
    ho risolto cancellando la riga in cui definivo sia le dimensioni che la posizione della list.

    Ottimo, ti ringrazio!
    No ... alt ... stai usando JLabel come "contenitore" per altri componenti?? Nooo. JLabel si usa per avere una "etichetta" (insomma un testo) e basta. Se vuoi un contenitore "generico", usa JPanel.
    Punto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    sì è una JPanel, mi sono confuso XD

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.