Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 15 su 15

Hybrid View

  1. #1
    Il preferred size mi va benissimo però non capisco come impostarlo. Se scrivo questo codice succedono cose strane...

    codice:
    package prova;
    
    import java.awt.*;
    
    import javax.swing.*;
    
    public class Esempio extends JFrame {
    
    	public Esempio() {
    		setSize(200, 200);
    		JPanel jp = new JPanel();
    		jp.setLayout(new FlowLayout());
    		int b = 0;
    		for (int i = 0; i < 20; i++) {
    			for (int j = 0; j < 20; j++) {
    				jp.add(new JButton("Button " + b));
    				++b;
    			}
    		}
    		jp.setPreferredSize(new Dimension(200, 200));
    		JScrollPane jsp = new JScrollPane(jp);
    		add(jsp, BorderLayout.CENTER);
    		getContentPane().add(jsp, BorderLayout.CENTER);
    	}
    
    	public static void main(String[] args) {
    		SwingUtilities.invokeLater(new Runnable() {
    			public void run() {
    				Esempio interfaccia = new Esempio();
    				interfaccia.setVisible(true);
    			}
    		});
    	}
    
    }

  2. #2
    Se ho capito bene basterebbe impostare una larghezza fissa a jp ed utilizzare quindi senza problemi il JScrollPane però non so come fissare questa larghezza...

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Se ho capito bene basterebbe impostare una larghezza fissa a jp ed utilizzare quindi senza problemi il JScrollPane però non so come fissare questa larghezza...
    Quello che hai fatto:

    jp.setPreferredSize(new Dimension(200, 200));

    è tecnicamente corretto. Questo imposta il preferred size sul pannello e JScrollPane si basa su questa dimensione per sapere a) se mostrare le scrollbar e b) quanto è la "corsa" dello scrolling.
    Ma il punto è che questo non risolve per magia tutti i problemi. Se espandi il frame oltre i 200x200, le scrollbar non compaiono più, perché JScrollPane giustamente vede che il pannello è più piccolo e quindi non necessita più di scrolling.
    D'altro canto ora i pulsanti "fluiscono" su più righe, perché non viene più usato il preferred size di FlowLayout.

    Purtroppo i layout manager di AWT/Swing, per come sono stati concepiti inizialmente, non hanno una funzionalità di calcolo delle dimensioni che si può riassumere con la frase: "se avessi una larghezza fissa, quanto saresti in altezza?". Questo non lo fanno ....

    In alternativa si dovrebbe sviluppare un proprio "flow layout", ad esempio come ha fatto un tizio in questa discussione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    I codici che vedo nella pagina che mi hai postato non funzionano e comunque se è complesso lascio perdere, provo a riprogettare l'intero layout.

    Grazie andbin
    Più pratica in futuro...

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    I codici che vedo nella pagina che mi hai postato non funzionano
    Non sono i codici direttamente a quella pagina linkata .... ma a quella a sua volta linkata, dove c'è la classe ModifiedFlowLayout.
    Da una prova che ho fatto velocemente, tecnicamente funziona .... eccome se funziona! Solo che allo startup c'è un brevissimo momento in cui i componenti sembra che vadano in "fibrillazione". Probabilmente la logica di calcolo non è perfetta o c'è dell'altro che dovrei analizzare. Ma una volta che è "stabilizzato", funziona correttamente, ovvero lo scrolling è solo verticale e la sua "corsa" è giusta per il numero di righe che fluiscono in base alla larghezza del frame in quel momento.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2026 vBulletin Solutions, Inc. All rights reserved.