Sto utilizzando una JList per contenere i dati della chat per il mio programma di chat.
Utilizza un renderer di elenco personalizzato per eseguire il rendering di un oggetto JPanel personalizzato come tipo di elemento.
Questo JPanel contiene due JLabel (ancorati in alto, per nome e ora) e un JTextArea (ancorato in fondo, per messaggio di chat).Revalidating JList - elementi personalizzati
Ecco come si presenta:
a pic1 http://oi44.tinypic.com/20jiix5.jpg
Tutto grandi opere, ma voglio aggiungere una funzione nascondi/mostra.
Utilizzando un gestore PopupMenu precedentemente programmato, viene visualizzato un popup quando si fa clic con il pulsante destro del mouse su un elemento.
a pic2 http://oi42.tinypic.com/2m5exxt.jpg
Quando si fa clic nascondere (o spettacolo, è un toggle) allora dovrebbe ridurre al minimo l'elemento in questo modo ...
a pic3 http://oi41.tinypic.com/kf3apx.jpg
L'unico problema è ... che doesn Aggiorna la dimensione della cella JList come puoi vedere la grande area vuota in cui un tempo si trovava il testo.
Tuttavia, quando si digita un altro messaggio ...
a pic4 http://oi40.tinypic.com/35jdoo7.jpg
Il JList fissa le dimensioni della cella completando l'operazione di 'nascondere'.
La mia domanda è come si ottiene JList per riconvalidare/ridisegnare/etc a livello di programmazione.
E non credere che non ho provato tutte le soluzioni ovvie ...
public void setHidden(boolean hidden) {
// this is in the custom JPanel class
System.out.println("Initial: " + this.getPreferredSize());
// TextArea is the JTextArea which we set invisible when we want to hide it.
TextArea.setVisible(!hidden); // TextArea is a variable btw
this.invalidate();
this.validate();
this.repaint();
System.out.println("After: " + this.getPreferredSize());
container.revalidate();
}
/*
* This is what the above printlns show when you hide, then show the element.
*
* Initial: java.awt.Dimension[width=176,height=38]
* After: java.awt.Dimension[width=176,height=20]
* Initial: java.awt.Dimension[width=176,height=20]
* After: java.awt.Dimension[width=176,height=38]
*/
public void revalidate() {
// container.revalidate() ^^^
// list is the list containing the chat elements
list.invalidate();
list.validate();
list.repaint();
}
La classe JPanel personalizzato utilizza un GroupLayout per rendere i componenti.
Ragazzi, avete qualche conoscenza su come programmare a livello di programmazione una JList per riconvalidarne le dimensioni?
... oltre ai metodi che ho postato? :)
Soluzione:
Dopo metodo di ricerca dopo che il metodo e la verifica se avrebbero risolvere il mio problema, ho scoperto che l'esecuzione di questo codice dopo un'operazione Mostra/Nascondi causerebbe l'altezza della cella (e larghezza) essere ricalcolati e senza alcun 'sfarfallio' visivo indesiderato di JList.
list.setFixedCellHeight(0);
list.setFixedCellWidth(0);
list.setFixedCellHeight(-1);
list.setFixedCellWidth(-1);
si prega di imparare le convenzioni di denominazione java e attenersi a loro – kleopatra
Conosco la convenzione di denominazione java, mi piace solo avere le mie variabili di oscillazione maiuscole. Ma non sempre lo seguo ... –