Sto cercando di mettere un JList
all'interno di un JScrollPane
e farlo in ordine alfabetico elencare le voci in colonne verticali come questo:JList: utilizzare una barra di scorrimento verticale anziché orizzontale con un orientamento verticale dell'involucro?
A D G
B E H
C F
Tuttavia quando i JList
si esaurisce lo spazio per visualizzare più voci, mi piacerebbe come lo JScrollPane
per scorrere solo nella direzione verticale.
Questo funziona quando utilizzo VERTICAL_WRAP
. Tuttavia, sembra che quando utilizzo l'involucro verticale ottengo una barra di scorrimento orizzontale e quando utilizzo lo HORIZONTAL_WRAP
ottengo la barra di scorrimento che desidero, ma gli elementi vengono inseriti in un ordine che non mi piace. Posso avere la mia torta e mangiarla anch'io? Ecco un semplice esempio di ciò che sto cercando di fare.
Questo è il più vicino ho potuto ottenere, ma mi piacerebbe essere in grado di scorrere in senso verticale, pur mantenendo l'ordinamento alfabetico verticale.
public class ScrollListExample {
static List<String> stringList = new ArrayList<String>();
static {
for (int i = 0; i < 500; i++) {
stringList.add("test" + i);
}
}
public static void main(final String[] args) {
final JFrame frame = new JFrame();
final Container contentPane = frame.getContentPane();
final JList list = new JList(stringList.toArray());
list.setLayoutOrientation(JList.VERTICAL_WRAP);
list.setVisibleRowCount(0);
final JScrollPane scrollPane = new JScrollPane(list);
contentPane.add(scrollPane);
frame.setPreferredSize(new Dimension(800, 400));
frame.pack();
frame.setVisible(true);
}
}
Una soluzione che ho però di Is: Se le dimensioni della cella è noto posso creare un ascoltatore componente, e ascoltare per un evento di ridimensionamento. Quando viene attivato quell'evento, posso calcolare il numero di righe desiderato per evitare lo scorrimento orizzontale. Sembra solo un trucco, e non sono sicuro di come potrebbe funzionare con componenti di testo di dimensioni variabili.
bella domanda +1 – mKorbel
La ragione si stanno ottenendo barra di scorrimento orizzontale quando si utilizza ' VERTICAL_WRAP' è 'VERICAL_WRAP => Indica il layout di" stile giornale "con le celle che scorrono verticalmente e poi orizzontalmente." Quindi, se la cella fluirà verticalmente ea causa delle dimensioni l'output verrà avvolto dal fondo in modo che inizi a riempirsi orizzontalmente. una barra di scorrimento orizzontale. – RanRag
Questo ha senso, ma la maggior parte dei miei tentativi di ridimensionare i componenti interni non ha funzionato come mi sarei aspettato. Come potrei forzare questo per mostrare una barra di scorrimento verticale e non orizzontale? C'è un componente specifico che devo ridimensionare? – Lockyer