Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755

    Problema con JScrollBar

    In una mia interfaccia grafica di un mio programma ho una JList racchiusa in uno JScrollPane...tramite un apposito metodo riempio la lista con delle determinate stringhe...
    dopo aver riempito la lista seleziono un elemento di essa
    codice:
    lista.setSelectedIndex (intero)
    a questo punto appare il "problema" da risolvere...essendo la lista molto grande (contiene molti valori) a meno che l'elemento selezionato non sia uno dei primi , alla visualizzazione della lista la scrollbar dello scrollpane non è posizionata in modo da visualizzare l'elemento selezionato...dunque voglio fare proprio questoosizionare la scrollbar in modo tale da visualizzare un'area di elementi tra cui vi è presente quello selezionato...come fare?

    Ho provato facendo
    codice:
    nomeScrollPane.getVerticalScrollBar().setValue(nomeLista.getSelectedIndex());
    ma non va,ho provato altri metodi ma niente...mi potreste illuminare su quale sia il/la metodo/procedura per fare ciò che chiedo?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Problema con JScrollBar

    Originariamente inviato da zipangulu
    dunque voglio fare proprio questoosizionare la scrollbar in modo tale da visualizzare un'area di elementi tra cui vi è presente quello selezionato...come fare?
    Ci sono 2 modi e nota, non c'è da andare direttamente a manipolare il JScrollBar (al massimo il JViewport).

    Modo 1)
    unJList.ensureIndexIsVisible(indiceRiga);

    Questo fa sì che la riga sia resa visibile. Da notare che la posizione fisica della riga all'interno della vista non è precisato, dipende da dove era "vista" prima di rendere visibile l'elemento (cioè se prima o dopo). Se la riga fosse già visibile, non viene cambiato nulla.

    Modo 2)
    codice:
    Rectangle rowRect = unJList.getCellBounds(indiceRiga, indiceRiga);
    
    if (rowRect != null) {
        JViewport viewport = scrollPane.getViewport();
        viewport.setViewPosition(rowRect.getLocation());
    }
    Questo fa sì che la riga sia resa visibile e posizionata sempre in alto/sinistra (a seconda della modalità di JList). Se non è possibile farlo (es. non ci sono sufficienti elementi affinché quella riga sia al "top") la riga è comunque garantito che sia visibile.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755

    Re: Re: Problema con JScrollBar

    Originariamente inviato da andbin
    Ci sono 2 modi e nota, non c'è da andare direttamente a manipolare il JScrollBar (al massimo il JViewport).

    Modo 1)
    unJList.ensureIndexIsVisible(indiceRiga);

    Questo fa sì che la riga sia resa visibile. Da notare che la posizione fisica della riga all'interno della vista non è precisato, dipende da dove era "vista" prima di rendere visibile l'elemento (cioè se prima o dopo). Se la riga fosse già visibile, non viene cambiato nulla.

    Modo 2)
    codice:
    Rectangle rowRect = unJList.getCellBounds(indiceRiga, indiceRiga);
    
    if (rowRect != null) {
        JViewport viewport = scrollPane.getViewport();
        viewport.setViewPosition(rowRect.getLocation());
    }
    Questo fa sì che la riga sia resa visibile e posizionata sempre in alto/sinistra (a seconda della modalità di JList). Se non è possibile farlo (es. non ci sono sufficienti elementi affinché quella riga sia al "top") la riga è comunque garantito che sia visibile.
    Grazie 1000!

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.