Visualizzazione dei risultati da 1 a 8 su 8

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Ok allora ho fatto un po' di prove ma sono ancora in alto mare.Ho provato a mettere per quel pannello il BoxLayout , il GridLayout e addirittura il GridBagLayout ma non riesco a ottenere ciò che voglio.
    Le label aggiunte continuano a non provocare la comparsa della barra, con il GridLayout gli ho pure aggiunto il parametro per lasciare lo spazio verticale tra le colonne della griglia, ottenendo solo il fatto di non fare visualizzare neanche una label se lo spazio lasciato non permette la visualizzazione di tutte le label!

    Posto comunque ciò che ho cambiato ma appunto non funziona, riusciresti a dirmi dove sbaglio?
    Vorrei aggiungere 3 JLabel per riga (in realtà di dimensione diversa ma per ora mi basta che siano uguali), e fare in modo che, aggiungendo la riga che uscirebbe dal pannello, compaia lo scroll e mi permetta di aggiungerne quante voglio.

    Intanto questo è il codice leggermente modificato:

    codice:
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.border.*;
    public class Scroll extends JFrame
    {
        public static void main(String[] args)
        {
            JFrame frame=new JFrame("Esempio Scroll");
            frame.setSize(700,681);        
            frame.setLocation(20,20);    
            frame.setResizable(false);        
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Container finestra=frame.getContentPane();
            finestra.setBackground(Color.WHITE);
            JPanel nord=newPanel(new JPanel(),700,110,Color.GREEN);
            JPanel ovest=newPanel(new JPanel(new BorderLayout(0,0)),442,540,Color.ORANGE);        
            JPanel centro=newPanel(new JPanel(new BorderLayout(0,0)),258,540,Color.WHITE);
            JPanel centroNord=newPanel(new JPanel(),258,200,Color.BLUE);
            JPanel centroSud=newPanel(new JPanel(),258,340,Color.RED);
            centroSud.setLayout(new GridLayout(20,3,0,10));
            for(int i=0;i<60;i++)centroSud.add(new JLabel("Prova"));
            finestra.add(nord,BorderLayout.NORTH);
            finestra.add(ovest,BorderLayout.WEST);
            finestra.add(centro,BorderLayout.CENTER);
            centro.add(centroNord,BorderLayout.NORTH);
            JScrollPane lista=new JScrollPane(centroSud);
            lista.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
            lista.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);        
            centro.add(lista,BorderLayout.SOUTH);        
            frame.setVisible(true);
        }
        public static JPanel newPanel(JPanel p,int h,int v,Color c)
        {
            p.setPreferredSize(new Dimension(h,v));
            p.setOpaque(true);
            p.setBackground(c);
            return p;
        }
    }
    Grazie intanto

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Ansharja Visualizza il messaggio
    Ok allora ho fatto un po' di prove ma sono ancora in alto mare.Ho provato a mettere per quel pannello il BoxLayout , il GridLayout e addirittura il GridBagLayout ma non riesco a ottenere ciò che voglio.
    Il punto è che stai cercando di fare svariate "forzature" che in genere non servono. Innanzitutto stai forzando il preferred size di tutti i pannelli. Sarebbe meglio ragionare in termini di contenuti, cioè di cosa dovranno contenere.

    Riguardo questo famigerato pannello centroSud, ci sono diverse questioni:
    - stai forzando il preferred size del pannello, quindi anche se ci mettessi 2000 label, non ottieni quello che vuoi.
    - hai messo il JScrollPane in un BorderLayout.SOUTH. In SOUTH viene rispettato solo il preferred height e quale è? È quello che viene chiesto al JScrollPane, il quale lo chiede al pannello aggiungendoci poi qualcosa del scroll pane (es. lo spazio per la/e barra/e). In sostanza il BorderLayout tenta di dimensionare il JScrollPane per far stare tutto il pannello! Ecco perché non scrolla. Sarebbe più sensato dare un preferred size al JScrollPane piuttosto che al pannello.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java 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.