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

    [Java] layout finestra errato

    Buongiorno, ho un problema con questa finestra:
    il JPanel pRegistration, non parte dalla coordinata 520-520, ma da 0-0
    perchè succede questo?

    ho provato a cercare informazioni relative al metodo getContentPane() però non ho trovato spiegazioni decenti -.-

    Grazie per la lettura (:

    codice:
    public class Finestra extends JFrame {
        public Finestra() {
            setSize(700, 700);
            setTitle("Finestra");
            setBackground(Color.BLUE);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
    
            JPanel pLogin=new JPanel ();
            pLogin.setLayout(null);
            pLogin.setBounds(10, 10, 500, 500);
            pLogin.setBackground(Color.lightGray);
            getContentPane().add(pLogin);
            
            JPanel pRegistration=new JPanel ();
            pRegistration.setLayout(null);
            pRegistration.setBounds(520, 520, 100, 100);
            pRegistration.setBackground(Color.RED);
            getContentPane().add(pRegistration);
        }
    }

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

    Re: [Java] layout finestra errato

    Originariamente inviato da xxstykkyxx
    il JPanel pRegistration, non parte dalla coordinata 520-520, ma da 0-0
    perchè succede questo?
    Il "content pane" di un JFrame ha per default un layout BorderLayout. Fare la add(unComponente) in un BorderLayout è equivalente a fare add(unComponente, BorderLayout.CENTER).
    In sostanza il pRegistration sta nella parte CENTER che copre tutto il content pane escludendo le altre 4 parti di BorderLayout (che tu non stai usando e quindi non ci sono).

    E il punto poi è che "vedi" solo pRegistration (che è l'ultimo inserito in CENTER) ma non pLogin.

    setBounds poi serve solo per posizionare/dimensionare un componente in un contenitore se il contenitore non ha un layout manager.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: Re: [Java] layout finestra errato

    Originariamente inviato da andbin
    Il "content pane" di un JFrame ha per default un layout BorderLayout. Fare la add(unComponente) in un BorderLayout è equivalente a fare add(unComponente, BorderLayout.CENTER).
    In sostanza il pRegistration sta nella parte CENTER che copre tutto il content pane escludendo le altre 4 parti di BorderLayout (che tu non stai usando e quindi non ci sono).

    E il punto poi è che "vedi" solo pRegistration (che è l'ultimo inserito in CENTER) ma non pLogin.

    setBounds poi serve solo per posizionare/dimensionare un componente in un contenitore se il contenitore non ha un layout manager.
    La soluzione per vedere sto pLogin e sto pRegistration affiancati qual'è?

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

    Re: Re: Re: [Java] layout finestra errato

    Originariamente inviato da xxstykkyxx
    La soluzione per vedere sto pLogin e sto pRegistration affiancati qual'è?
    Affiancati come? (in senso orizzontale?) E come devono "spartirsi" lo spazio del content pane? 50% l'uno? O con altri "pesi"? O in base al loro contenuto?

    Quando si parla di "layout" bisogna essere precisi nel descrivere cosa si vuole ottenere, altrimenti è inutile ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5

    Re: Re: Re: Re: [Java] layout finestra errato

    Originariamente inviato da andbin
    Affiancati come? (in senso orizzontale?) E come devono "spartirsi" lo spazio del content pane? 50% l'uno? O con altri "pesi"? O in base al loro contenuto?

    Quando si parla di "layout" bisogna essere precisi nel descrivere cosa si vuole ottenere, altrimenti è inutile ....
    Pardon, intendevo di come fare per averli affiancati orizzontalmente...
    Per esempio fare un panel nel BorderLayout.CENTER per fare uno sfondo e poi avere pLogin e pRegistation affiancati orizzontalmente. Il punto è che non so come affiancarli orizzontalmente e dove poterli mettere...

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    mi pare di capire che tu voglia vedere un riquadro grande in grigio ed uno piccolo in rosso, esterno al riquadro grigio 10px a destra e 10px in basso rispetto all'angolo db-basso del riquadro grande grigio? Setta il layout del JFrame a null...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Originariamente inviato da Andrea1979
    mi pare di capire che tu voglia vedere un riquadro grande in grigio ed uno piccolo in rosso, esterno al riquadro grigio 10px a destra e 10px in basso rispetto all'angolo db-basso del riquadro grande grigio? Setta il layout del JFrame a null...
    Ora ho capito...
    Se non aggiungo "setLayout(null);" c'è il manager che imposta la pagine in
    north,east,sud,west,center in base alla grandezza della finestra.
    Se aggiungo l'istruzione invece tutto diventa dinamico rispetto al programmatore..

    Giusto?

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    no, tutto diventa un cetriolone da gestire manualmente
    Il fatto che abbiano "inventato" i Layout Manager in Java è solo un aiuto, e non un ostacolo, al programmatore: settando il Layout a null, ovviamente lecito e fattibile, oneri ed onori di gestire l'interfaccia grafica passano tutti al programmatore (con buona pace della gestione automatica di resize, diverse piattaforme etc etc). Certo nel tuo caso ottieni in una riga di codice l'effetto voluto.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Originariamente inviato da Andrea1979
    no, tutto diventa un cetriolone da gestire manualmente
    Il fatto che abbiano "inventato" i Layout Manager in Java è solo un aiuto, e non un ostacolo, al programmatore: settando il Layout a null, ovviamente lecito e fattibile, oneri ed onori di gestire l'interfaccia grafica passano tutti al programmatore (con buona pace della gestione automatica di resize, diverse piattaforme etc etc). Certo nel tuo caso ottieni in una riga di codice l'effetto voluto.
    La solita frase: "il computer esegue stupidamente le stupide istruzioni del programmatore" (:

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.