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

    [JAVA] Utilizzo e funzionamento Jscroll + iterazione tra oggetti

    Ciao a Tutti,

    stò cercando di imaparare java ma venendo da vb.net devo ammettere che lo trovo molto ostico. Premetto che sto leggendo qualche guida ma volevo intanto capire alcune cose che per me sono fondamentali per quello che ci devo fare.

    Prima domanda (a carattere generale): dove posso trovare una guida/articolo/esempio che mi faccia capire come iteragiscono gli oggetti creati in fase di proggettazione e quelli creati in fase di codice? mi sembra che si comportino in maniera differente o dipende solo dal layout manager e dalla mia inesperienza??

    seconda cosa più pratica. Ho un problema a capire coem funziona il jScrollPan. Ho già letto alcune cose sul forum, ma continuo ad avere dei grossi dubbi. In pratica io devo mettere all'interno dello jscroll un oggetto che qualora diventasse pi grande del jscroll stesso, lo jscroll mette le scrollbar e tutto è risolto. Invece no..
    Io ho un jscrollpane checontiene un jpanel (entrambi gli oggetti sono disegnati in fase di proggettazione). il Jpanel ha layout free design. Premendo un pulsanto sul jpanel ci disegno diversi oggetti e si ridimensiona in base al numero di oggetti che contiene diventando più grande dello jscrollpane. Ma lo scroll si attiva solo se ridimensiono l'intero frame madre..


    vi posto il codice che faccio prima:

    codice:
    private void creaCienamActionPerformed(java.awt.event.ActionEvent evt) { 
    
    int y=20;
    
    
    cinema.nome=nomeCinema.getText();
    cinema.numSale=Short.parseShort(numSale.getText());
    System.out.println(cinema.anagrafica());
    
    
    //creao tante line di oggetti quante sale
    for (int i = 1; i<cinema.numSale+1; i++){ 
    
    //creo tutta una serie di oggetti in sequenza
    JLabel lab=new JLabel();
    JTextField capSala=new JTextField();
    JCheckBox è3d= new JCheckBox();
    lab.setName("label"+i);
    lab.setText("Sala: "+i);
    capSala.setName("capSala"+i);
    è3d.setName("è3d"+1);
    pSale.add(lab);
    lab.setBounds(30, y, 80, 20);
    pSale.add(capSala);
    capSala.setBounds(100, y, 80, 20);
    capSala.setText(capSala.getName());
    pSale.add(è3d);
    è3d.setBounds(210, y, 20, 20);
    y=y+30;
    
    //qua ridimensione il jpanel
    pSale.setSize(new Dimension(scrollSale.getWidth(),y));
    pSale.validate();
    }
    
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Utilizzo e funzionamento Jscroll + iterazione tra oggetti

    Originariamente inviato da eternauta
    stò cercando di imaparare java ma venendo da vb.net devo ammettere che lo trovo molto ostico.
    Non conosco/uso vb.net ma se hai una minima/buona "base" di programmazione ad oggetti, Java non dovrebbe essere una cosa tanto ostica. Certo .. cambia (molto da vb.net) la sintassi, certi concetti hanno regole diverse.

    Originariamente inviato da eternauta
    Prima domanda (a carattere generale): dove posso trovare una guida/articolo/esempio che mi faccia capire come iteragiscono gli oggetti creati in fase di proggettazione e quelli creati in fase di codice? mi sembra che si comportino in maniera differente o dipende solo dal layout manager e dalla mia inesperienza??
    Cosa intendi per "in fase di progettazione"? (l'editing visuale in un IDE, immagino?) E poi per "in fase di codice"?

    Originariamente inviato da eternauta
    Io ho un jscrollpane checontiene un jpanel (entrambi gli oggetti sono disegnati in fase di proggettazione). il Jpanel ha layout free design. Premendo un pulsanto sul jpanel ci disegno diversi oggetti e si ridimensiona in base al numero di oggetti che contiene diventando più grande dello jscrollpane. Ma lo scroll si attiva solo se ridimensiono l'intero frame madre..
    JScrollPane determina se/di quanto permettere lo scrolling del componente basandosi su uno dei seguenti criteri:
    1) Se il componente implementa Scrollable.
    2) Dal "preferred size" (ovvero getPreferredSize() ) del componente.

    JTable, JTextArea e altri componenti complessi che potenzialmente posso espandersi molto, implementano Scrollable. Un JPanel no, non implementa di serie Scrollable, pertanto tipicamente si è nel caso 2).

    Se a seguito di un qualche evento hai intenzione di cambiare esplicitamente il preferred size del pannello contenuto nel JScrollPane, in modo che si espanda e che JScrollPane mostri le scrollbar e/o evidenzi che il contenuto è "più grande", puoi benissimo farlo con setPreferredSize.
    Ma non basta (non avresti evidenza subito). Devi anche fare un revalidate() sul pannello.
    revalidate() risale lungo la gerarchia di contenimento, fino a trovare un componente che è un "validate root" (e JScrollPane lo è di serie). Trovato, fa partire un validate da quella radice fino a tutti i suoi componenti contenuti. Questo fa "validare" il layout, che si aggiorna.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie Andbin per la tua risposta,

    il tuo suggerimento è stato prezioso. Posto il codice corretto per eventuali futuri:

    codice:
    //pSale.setSize(new Dimension(scrollSale.getWidth(),y)); COSI NON VA BENE!!!
    
    
                pSale.setPreferredSize(new Dimension(scrollSale.getWidth(),y));
                pSale.revalidate();
    Per il resto, non vorrei essermi spiegato male, non sono un esperto programmatore di vb, tuttavia sto cercando di rifare un programma che avevo fatto in vb per sfruttare gli enormi vantaggi di java (a partire dalla multipiattaforma), e diciamo che se in vb in poco tempo ero arrivato ad affrontare la parte centrale del proggettino, qui nello stesso tempo sto brancolando tra setSize e setPreferedSize... e ora devo capire qual'è la 'traduzione' java dell'addhandler e adressof...
    Per la tua domanda si, intendo che mi sembra che gli oggetti disegnati nell'IDE seguano uno 'stile di vita' leggermente diverso da quelli creati in codice (per farmi intendere JLabel l=new Jlabel(); etc). Tanto è vero che se, nel programmino di sopra, provassi a creare il pannello da codice, non dovrei utilizzare revalidate, ma repaint o paint, non è cosi? Quindi lo stesso oggetto avrebbe due metodi differenti per ottenere la stessa cosa.. spero che non sia cosi, ma che abbia capito solo male, perchè costruire tutti gli oggetti istanziandoli da codice è molto elegante e proffesionale, ma assai complicato per i novellini!!

    Grazie ancora.

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.