In Java Swing come si può gestire un elenco di quadri che permettono pannelli multipli di essere selezionati?
Domanda
Sto lavorando su un app in-house che traccia un mucchio di compiti. Volevo avere un semplice monitor di compito che sarebbe elencare il nome di attività e lo stato del task. Ho bisogno di questo per cercare solo un bel po ', io non sono un progettista per cui qualunque cosa che faccio è andare a succhiare, ma un display testo di base non funziona per i requisiti di progetto.
Quello che sto essenzialmente cercando di fare è mostrare qualcosa di simile al Firefox finestra di download, le I-Tunes finestra di download, e ben mi sapeva dare un nome più, ma sembrano tutti fondamentalmente la stessa. In ciascuna di queste applicazioni, ciascuno dei ‘Pannelli di progresso’ è selezionabile. Quindi, per implementare questo ho pensato che sarebbe stato semplice per utilizzare solo una lista di JPanels ognuno con un JProgressBar e JLabel, ognuno dei quali può solo accettare attenzione per determinare se esso e gli altri sono selezionati. Ho pensato che questo sarebbe stato un compito facile, ma se io uso un JList solo visualizza il testo. Poi ho solo pensato vorrei mostrare tutti i pannelli di attività in un pannello più grande, ma non riesco a ottenere i pannelli interni di riconoscere messa a fuoco.
C'è un modello per questo? C'è una soluzione standard di laminati che ho appena non ho trovato? O c'è un metodo migliore per fare questo? Non voglio di re-inventare la ruota, ma ho pensato che questo stava per essere semplice.
Soluzione
E 'suona come quello che si può essere cercate è un JList
.
È possibile aggiungere le voci ai JList
di aggiungendo prima il vostro "compito" al dell'oggetto JList
ListModel
(vedere la Creazione di un modello sezione dal Java Tutorial), e poi si vorrà assegnato un personalizzato ListCellRenderer
che accettare la sua 'compito' e rendere il JList
come JPanel
nella lista stessa. La chiave qui è quello di rendere il vostro ListCellRenderer
personalizzato in grado di visualizzare il "compito" nel JList
modo in cui si vuole avere mostrare sul JList
.
Date un'occhiata al rel="noreferrer"> dal come utilizzare gli elenchi pagina di Java Tutorial. Essa descriverà come rendere il vostro ListCellRenderer
personalizzato in modo da poter rappresentare il vostro "compito", come tutto quello che vuoi.
Per farla breve, si attuerà il ListCellRenderer
interfaccia implementando getListCellRendererComponent
che restituirà un Component
che è la rappresentazione del vostro compito nella JList
. Probabilmente si vorrà a uno costruire o un'istanza per il JPanel
in questo metodo e restituirlo come Component
.
Altri suggerimenti
Il modo standard di fare questo genere di cose è quello di usare JTable (o JList) come contenitore.
Non è necessario usare renderes predefinite fot celle della tabella, ma è possibile specificare il proprio renderer per cellule specifiche. Date un'occhiata a CellRenderer
Come circa (da selezionare quale è possibile impostare per consentire più righe) un JTable
con JPanel
interna occupante la singola cella di ogni riga, che contiene un JProgressBar
e JLabel
. Oppure si potrebbe usare un JList
con la stessa struttura che ho appena descritto.