Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305

    Differenza tra setSize e setPreferredSize

    Salve, qualcuno potrebbe spiegarmi la differenza tra questi due metodi che mi stanno facendo letteralmente impazzire. Adesso vi posto anche il codice del form che ho creato pero non capisco perchè se ridimensiono il secondo pannello con la setPreferredSize non ottengo il risultato sperato. Mentre se metto la setSize anche al primo pannello si rimpicciolisce tutto !! per piacere aiutatemi.
    Addirittura se tolgo la setSize dal secondo Pannello il FlowLayout mette i bottoni uno sotto l'altro...
    codice:
        private void initComponents(){        this.addWindowListener(new WindowAdapter(){
                @Override
                public void windowClosing(WindowEvent evt){
                    FormMailSettings.open=false;
                }
            
            });
            this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            jl_mitt=new JLabel("E-Mail:   ");
            jl_pass=new JLabel("Password:   ");
            jl_port=new JLabel("Port:   ");
            jl_host=new JLabel("Host:    ");
            mitt=new JFormattedTextField(SendMail.getMitt());
            pass=new JFormattedTextField(SendMail.getpwd());
            host=new JFormattedTextField(SendMail.getHost());
            port=new JFormattedTextField(SendMail.getPort());
            jb1=new JButton("Enter");
            jb2=new JButton("Cancel");
            this.setTitle("Mail Settings");
    
    
            //Inserisco due pannelli nel frame utilizzando il gridbagLayout
            jp1=new JPanel();
            jp2=new JPanel();
            GridBagLayout layout=new GridBagLayout();
            GridBagConstraints c=new GridBagConstraints();
            this.setLayout(layout);// setto il layout
            jp1.setPreferredSize(new Dimension(350,250));
            
            c.weightx = .5;
            c.weighty = .2;
            c.gridx = 0;
            c.gridy = 0;
            c.insets.top = 0;
            c.insets.left = 0;
            this.add(jp1);
            layout.setConstraints(jp1, c);
            
            //inserisco il secondo pannello
            c.gridy=1;
            this.add(jp2);
            layout.setConstraints(jp2, c);
           
            //imposto il layout del primo pannello
            jp1.setLayout(layout);
            Dimension d=new Dimension();
            //gli inserisco gli elementi
            d.setSize(200,29);
            c.anchor=GridBagConstraints.WEST;
            //primo elemento jlabel
            
            c.fill=GridBagConstraints.NONE;
            c.gridx=0;
            c.gridy=0;
            jp1.add(jl_mitt);
            layout.setConstraints(jl_mitt, c);
          
            
            //primo elemento jfield
            c.fill=GridBagConstraints.HORIZONTAL;
            c.gridx=1;
            jp1.add(mitt);
             mitt.setPreferredSize(d);
            layout.setConstraints(mitt, c);
            
            //secondo elemento  jlabel
            c.fill=GridBagConstraints.NONE;
            c.gridy=1;
            c.gridx=0;
            jp1.add(jl_pass);
            layout.setConstraints(jl_pass, c);
           
            //secondo elemento passwordfield
            c.fill=GridBagConstraints.HORIZONTAL;
            c.gridx=1;
           pass.setPreferredSize(d);
            jp1.add(pass);
            layout.setConstraints(pass, c);
            
            //terzo elemento jlabel
            c.fill=GridBagConstraints.NONE;
            c.gridy=2;
            c.gridx=0;
            jp1.add(jl_host);
            layout.setConstraints(jl_host, c);
            
            //terzo elemento jfield
            c.fill=GridBagConstraints.HORIZONTAL;
            c.gridx=1;
            host.setPreferredSize(d);
            jp1.add(host);
            layout.setConstraints(host, c);
    
    
            //quarto elemento jlabel
            c.fill=GridBagConstraints.NONE;
            c.gridy=3;
            c.gridx=0;
            jp1.add(jl_port);
            layout.setConstraints(jl_port, c);
            
            //quarto elemento jfield
            c.fill=GridBagConstraints.HORIZONTAL;
            c.gridx=1;
            port.setPreferredSize(d);
            jp1.add(port);
            layout.setConstraints(port, c);
            
            //jbutton
            jp2.setSize(new Dimension(80,80));
            FlowLayout f=new FlowLayout(FlowLayout.LEFT,5,5);
            System.out.println(jp2.getSize());
            jp2.setLayout(f);
            jp2.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
            jp2.add(jb1,ComponentOrientation.LEFT_TO_RIGHT);
            jp2.add(jb2);
           // jb1.setLocation(jp2.getWidth()/2, (jp1.getHeight()+jp2.getHeight())/2);
           // jb2.setLocation(jp2.getWidth()/2+jb1.getWidth()+20, jp1.getHeight()+jp2.getHeight()/2);
            this.setVisible(true);
            this.pack();
            this.setLocation(this.getToolkit().getScreenSize().width/2-this.getWidth()/2, 
                    this.getToolkit().getScreenSize().height/2-this.getHeight()/2);
            jb1.addActionListener(new ActionListener(){
    
    
                @Override
                public void actionPerformed(ActionEvent e) {
                        SendMail.setMailSettings(mitt.getText(), pass.getText(), host.getText(), port.getText());
                        FormMailSettings.open=false;
                        FormMailSettings.this.dispose();
                        
                }
                
            });
            
            //HANDLER TASTO CANCEL
             jb2.addActionListener(new ActionListener(){
    
    
                @Override
                public void actionPerformed(ActionEvent e) {
                        FormMailSettings.this.dispose();
                        FormMailSettings.open=false;
                }
                 
             });
           
        }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    Salve, qualcuno potrebbe spiegarmi la differenza tra questi due metodi che mi stanno facendo letteralmente impazzire.
    Se un contenitore non ha un layout manager ( contenitore.setLayout(null); ), i componenti devono essere posizionati/dimensionati esplicitamente con setLocation+setSize o setBounds.
    Il "size" è la dimensione reale, fisica di un componente a video.

    Se un contenitore ha un layout manager, allora il layout manager può prendere in considerazione una qualunque combinazione (tutti, alcuni, nessuno) di minimum/maximum/preferred size (setMinimumSize/setMaximumSize/setPreferredSize) secondo i suoi criteri, vincoli particolari e aree in cui eventualmente suddivide il contenitore. Ci pensa poi il layout manager ad usare setLocation+setSize o setBounds sui componenti (quindi in questo caso non vanno usati esplicitamente!).

    Se comprendi questo, riesci ad usare qualunque dei layout manager basilari (ignora/escludi finché puoi SpringLayout/GroupLayout perché sono complessi/contorti).
    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.