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

    Scrolling verticale in un frame

    Ciao,
    vorrei inserire una scrollbar verticale in un JDesktopPane. (desktop1)

    Di seguito riporto la logica dell’applicazione:

    main:
    ...
    codice:
    voice_pAnagrafica.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    p p = new p();		
    p.setVisible(true);		
    desktop.add(p); 		
    }});
    ...

    Dal main richiamo il file “p.java”

    File “p.java”
    codice:
    public void itemStateChanged(ItemEvent e) {
    	    if (e.getStateChange() == ItemEvent.SELECTED) {
    	    		    	
    	    	t t = new t();
    	    	t.setVisible(true);	    	
    	    	desktop1.add(t);
    	    	JFrame frame = new JFrame();   						 frame.getContentPane().add(desktop1, BorderLayout.CENTER);
    	        frame.setSize(1100,500);
    	        frame.setVisible(true);
    	        
    	    }
    	}
    Nel file “p.java”,quando si clicca su una voce di una combo box, devo aprire un’altra finestra contenente una serie di textfield che occupa più della lunghezza dello schermo; da qui la necessità di inserire una scrollbar verticale.
    La finestra con le textfield si trova nel file t.java

    In questo momento apro il frame contenente le textfield,ma non posso andare oltre la fine dello schermo a vedere le rimanenti textfield.

    Ho provato a inserire un JScrollPane all’interno del file p.java,ma mi dà il seguente messaggio:
    “adding a window to a container”

    Non mi è ben chiaro cosa intenda il messaggio.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Devi mettere il JDesktopPane dentro il JScrollPane .... fin qui non ci piove. E il JScrollPane è quello che va aggiunto nella parte CENTER del BorderLayout del content pane del frame e pure qui non ci piove.

    La questione è che se vuoi che compaia la scrollbar verticale e/o orizzontale, il "preferred size" del JDesktopPane deve essere maggiore rispetto alla dimensione della "vista" mostrata dal JScrollPane!

    Quindi o imposti tu un preferred size maggiore oppure se vuoi che la dimensione del JDesktopPane si espanda solo quando trascini un internal frame un pochino fuori dal JDesktopPane, allora dovresti registrare un ComponentListener su ogni internal frame e ad ogni movimento (o ridimensionamento) vedi se il frame va fuori dal JDesktopPane e quindi aggiusti la sua dimensione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ciao,
    ho sistemato un pò il codice.
    Vorrei ottenere l'effetto che si ha con le finestre del browser, dove c'è una barra di scorrimento a destra che scorre.

    file p.java
    codice:
    public void itemStateChanged(ItemEvent e) {
    	    if (e.getStateChange() == ItemEvent.SELECTED) {	    	
    	    	t t = new t();
    	    	t.setVisible(true);	   
    	    	main.desktop.add(t);
    	    	
    	    }
    	}
    file t.java
    codice:
    ...
    public class t extends JInternalFrame implements ActionListener,ComponentListener{
    ...
                final JScrollPane jsp = new JScrollPane(panelSub);
    	//panelSub è il pannello che contiene tutte le jtextfield				jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
                getContentPane().add(jsp);
    ...
    public void componentMoved(ComponentEvent e) {
            final Rectangle r = this.getBounds();
            final Dimension d = new Dimension(r.x+r.width, r.y+r.height);
            main.desktop.setPreferredSize(d);
                	}

    Adesso la barra di scorrimento (la jcsrollpane) si vede,ma è fissa (occupa tutta la lunghezza del frame),non scorre.
    Ho provato a inserire i metodi dell'interfaccia ComponentListener,ma non succede nulla.

    Dove sbaglio?

    grazie per l'attenzione

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Georges
    codice:
    public class t extends JInternalFrame implements ActionListener,ComponentListener{
    ...
                final JScrollPane jsp = new JScrollPane(panelSub);
    	//panelSub è il pannello che contiene tutte le jtextfield				jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
                getContentPane().add(jsp);
    ...
    public void componentMoved(ComponentEvent e) {
            final Rectangle r = this.getBounds();
            final Dimension d = new Dimension(r.x+r.width, r.y+r.height);
            main.desktop.setPreferredSize(d);
                	}
    Scusa ma .... chiarisci un po': vuoi poter scrollare il contenuto del internal frame o il contenuto del desktop pane???

    Che ti serve mettere un scroll pane nel content pane del internal frame quando poi invece vai ad agire sul preferred size del desktop pane???
    Allora metti il desktop pane dentro un scroll pane!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    ...devo fare lo scrolling dell'internal frame.

    Ho quindi sostituito nei metodi che implementano l'interfaccia Componentlistener il riferimento allo scrollpane,ma non cambia nulla

    codice:
    public class t extends JInternalFrame implements ActionListener,ComponentListener{
    ...
                final JScrollPane jsp = new JScrollPane(panelSub);
    	//panelSub è il pannello che contiene tutte le jtextfield				jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
                getContentPane().add(jsp);
    ...
    public void componentMoved(ComponentEvent e) {
            final Rectangle r = this.getBounds();
            final Dimension d = new Dimension(r.x+r.width, r.y+r.height);
           jsp .setPreferredSize(d);
                	}

    la scrollpane resta con la barra di scorrimento fissa

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.