Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    problema con lo JScrollPane

    Salve a tutti.
    Ho un problema con lo JScrollPanel.
    Praticamente, dovrei caricare un'immagine all'interno dello JScrollPanel. All'avvio dell'applicazione, va tutto bene. Se cambio immagine (scegliendo il path da un JTree), mi carica lo JScrollPane vuoto, con niente all'interno.
    VI posto parte del codice per chiarimenti

    [code]

    //funzione che apre l'immagine
    public void open()
    {
    try
    {

    this.image = ImageIO.read(new File(getPathFile()));
    this.imageToDraw = Toolkit.getDefaultToolkit().createImage(image.getS ource());
    }
    catch(Exception e)
    {
    return;
    }



    //funzione che ritorna lo JScrollPanel iniziale
    private JScrollPane getJScrollPane() {
    if (jScrollPane == null) {
    jScrollPane = new JScrollPane();
    jScrollPane.setBounds(new Rectangle(2, 3, 236, 538));
    jScrollPane.setViewportView(getJTree1());
    }
    return jScrollPane;
    }


    //funzione che genera l'albero (lo prende da un'altra classe) e gestisce il listener. lo //stringTOkenizer è messo per prendere il path del file selezionato nel formato // /home/cartella/file

    private JTree getJTree1() {
    if (jTree1 == null) {
    try{
    FileTree fileTree =new FileTree();

    jTree1 = fileTree.getJTree();
    jTree1.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
    public void valueChanged(javax.swing.event.TreeSelectionEvent e) {

    DefaultMutableTreeNode node = (DefaultMutableTreeNode)
    jTree1.getLastSelectedPathComponent();

    if (node == null)
    return;

    if(node.isLeaf())
    {
    TreePath path = jTree1.getSelectionPath();

    if(path != null)
    {
    StringTokenizer tokenPath = new StringTokenizer(path.toString(), "[/,]");
    int countToken = tokenPath.countTokens();
    String toPrint = "";
    String newPicPath = "";
    for(int i = 0; i<countToken; i++)
    {
    toPrint = tokenPath.nextToken();
    if(toPrint.startsWith(" "))
    toPrint = toPrint.replaceFirst(" ", "/");

    newPicPath = newPicPath+toPrint;
    }

    setPathFile(newPicPath);
    //updateScrollPane dovrebbe aggiornare lo scrollPanel

    updateScrollPane();
    toPrint = "";
    newPicPath = "";
    repaint();

    }
    }
    }
    });
    }

    catch(Exception e)
    {
    e.printStackTrace();
    }
    }
    return jTree1;
    }


    //funzione che aggiorna (o dovrebbe aggiornare) lo JScrollPanel... mi crea Lo scrollpanel, lo inserisce nel pannello, però l'interno è vuoto.


    private void updateScrollPane()
    {

    if(jScrollPane1 != null)
    {
    this.remove(jScrollPane1);
    this.repaint();
    }

    open();
    this.ii = new ImageIcon(imageToDraw);
    JLabel label = new JLabel(ii);

    add(label, null);
    this.jScrollPane1 = new JScrollPane(label);
    this.jScrollPane1.setBounds(new Rectangle(245, 4, 700, 627));
    this.jScrollPane1.setVisible(true);

    add(jScrollPane1, null);

    }

    Cosa c'è di sbagliato? Grazie mille. (PS, ho anche provato a inserire una JTextArea al posto della label, giusto per vedere se vi erra un errore nell'algoritmo di presa path dall'albero (anche se, tramite istruzioni di print, l'output lo prende e lo tokenizza in modo corretto) ma, anche mettendo una textArea, lo ScrollPanel risulta vuoto...

    grazie mille a chiunque voglia aiutarmi.

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    mi sono fermato istantaneamente nella lettura del codice per via della mancanza di formattazione ma ho notato una gestione un po' troppo all'acqua di rose di un eventuale eccezione nel metodo open... non ti limitare ad un return, fatti -almeno in questa fase- stampare lo StackTrace dell'eccezione

    codice:
    catch (Exception e) {
      e.printStackTrace();
    }
    poi importare classi non è peccato: perché ti trascini dietro codice del tipo
    codice:
    javax.swing.event.....
    se non serve? Hai altre classi con nomi uguali in package diversi con cui potresti generare un conflitto? Quello è l'unico scenario possibile in cui mi aspetterei di trovare la sintassi che hai usato sistematicamente
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Poi nell'ultimo metodo perché fai
    codice:
    add(label, null);
    e poi aggiungi anche lo scrollpane, ma solo dopo averlo reso visibile (e dove sarebbe nel frattempo?) - prova a seguire un filo logico così i problemi si risolvono da soli
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    allora... per l'ultimo metodo, add(label, null) è una cosa che avevo provato a fare, per vedere se mi aggiungeva la jlabel... infatti, la jlabel con l'immagine me l'aggiunge, ma quando vado mettere la jlabel dentro lo jscrollPane, non succede niente... mi resta il pannello vuoto (indipendentemente se aggiungo la jlabel al pannello principale o meno).

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Ad ogni modo, la sequenza "corretta" delle azioni sarebbe:

    -Crei la tua JLabel con l'immagine
    -Crei il tuo JScrollPane in cui inserisci l'immagine

    e poi in caso di selezione di una nuova immagine:
    -Setti la nuova Icon nella tua JLabel
    -Chiami validate sul tuo JScrollPane che racchiude la JLabel con l'immagine (così sei sicuro di forzare il repaint di tutti i componenti nello scrollpane stesso)

    codice:
    private void updateScrollPane() {
      open();
      ii = new ImageIcon(imageToDraw);
      label.setIcon(ii);
      jScrollPane1.validate();
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    perfetto... Risolto... non sapevo che bisognava fare il vlaidate(), in effetti, il problema sembrava essere tutto la :-D

    Grazie mille.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.