Domanda
Ho bisogno di visualizzare diversi disegni su un JPanel. Ho messo i file di disegno in un array, ma quando l'ho cambiato con un pulsante, il JPanel visualizza solo primo disegno e non cambia alla prossima estrazione ...
Ho chiamato panel.revalidate (), ma pretende molto lavoro.
Questo è il segmento del codice che ho usato, ma non funziona. Il display JPanel era statica.
String[] a = {"image1.txt","image2.txt","image3.txt"};
List<String> files = Arrays.asList(a);
public void actionPerformed(ActionEvent e) {
if (e.getSource() == answer1){
fileNumber++;
//call other class for painting (files=array files, fileNumber=index of the array)
draw = new drawingPanel(files,fileNumber);
panel.add(draw);
}
panel.revalidate();
panel.repaint();
}
Soluzione
Si potrebbe provare a tenere un riferimento alla tua drawingPanel e chiamando remove () sulla drawingPanel esistente prima di ri-aggiungerlo. Secondo il JPanel JavaDoc, il layout è FlowLayout di default - che non lo farà sostituire l'immagine, come avete intenzione, ma sarà invece posizionare la prossima drawingPanel alla destra di quello precedente. (Cosa succede quando si ridimensiona la finestra?)
A proposito, come si fa a gestire il caso in cui si superare l'ultima immagine nella matrice?
Altri suggerimenti
Stai visualizzando solo un disegno alla volta? Se è così, si consiglia di provare a utilizzare un CardLayout, in modo da poter passare tra i disegni facilmente. Vedere http://java.sun.com/docs/books /tutorial/uiswing/layout/card.html per un esempio.
Ho avuto un problema simile l'altro giorno si tenta di visualizzare dinamicamente diversi pulsanti sul mio UI a seconda di quale scheda di un JTabbedPane l'utente selezionato. CardLayout era la cosa giusta per rendere le cose facili.