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();
}
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top