Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di MOBILUK
    Registrato dal
    Apr 2001
    Messaggi
    225

    [JAVA] GridBagConstraints

    ho da poco iniziato a studiare le interfacce grafiche di Java e mi sono imbattuto (come era ovvio che fosse!) nelle Swing.

    Al momento sto cercando di capire in che modo funzionino le layout, e tra queste c'è una che in parte non capisco, la GridBagConstraints.

    di seguito il codice si un esempio che ho trovato in rete (il programma non esegue nulla).

    codice:
    import javax.swing.*;
    
    import java.awt.*;
    
    public class Layout extends JFrame {
    
    //Creiamo i componenti 
    
    JLabel ipLabel = new JLabel("IP host", SwingConstants.LEFT);
    
    JLabel passwordLabel = new JLabel("Password", SwingConstants.LEFT);
    
    JLabel fileDaInviareLabel = new JLabel("File da inviare", SwingConstants.LEFT);
    
    JTextField ipText = new JTextField();
    
    JPasswordField passwordText = new JPasswordField(); 
    
    JTextField fileDaInviareText = new JTextField();
    
    JButton pulsante = new JButton("Inizia TX"); 
    
    // Definiamo un metodo che ci servirà per definire i limiti di layout
    
    void impostaLimite(GridBagConstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy) {
    
    gbc.gridx = gx;
    
    gbc.gridy = gy;
    
    gbc.gridwidth = gw;
    
    gbc.gridheight = gh;
    
    gbc.weightx = wx;
    
    gbc.weighty = wy;
    
    }
    
    
    
    
    
    
    
    
    
    public Layout() { // Il costruttore della nostra classe
    
    super("File transfer appz");
    
    setSize(300, 120);
    
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    
    JPanel pannello = new JPanel();
    
    // impostiamo le proprietà dei componenti
    
    ipText.setEditable(true);
    
    fileDaInviareText.setEditable(true);
    
    passwordText.setEchoChar('*'); 
    
    //definiamo il gestore di layout
    
    GridBagLayout grigliaAvanzata = new GridBagLayout();
    
    GridBagConstraints limite = new GridBagConstraints();
    
    pannello.setLayout(grigliaAvanzata);
    
    //definiamo i limiti di ogni componente e lo aggiungiamo al pannello
    
    impostaLimite(limite,0,0,1,1,35,0); //etichetta IP host
    
    limite.fill = GridBagConstraints.NONE;
    
    limite.anchor = GridBagConstraints.EAST;
    
    grigliaAvanzata.setConstraints(ipLabel,limite);
    
    pannello.add(ipLabel);
    
    impostaLimite(limite,1,0,1,1,65,100); //campo IP host
    
    limite.fill = GridBagConstraints.HORIZONTAL;
    
    grigliaAvanzata.setConstraints(ipText,limite);
    
    pannello.add(ipText);
    
    impostaLimite(limite,0,1,1,1,0,0); //etichetta password
    
    limite.fill = GridBagConstraints.NONE;
    
    limite.anchor = GridBagConstraints.EAST;
    
    grigliaAvanzata.setConstraints(passwordLabel,limite);
    
    pannello.add(passwordLabel);
    
    impostaLimite(limite,1,1,1,1,0,100); //campo password
    
    limite.fill = GridBagConstraints.HORIZONTAL;
    
    grigliaAvanzata.setConstraints(passwordText,limite);
    
    pannello.add(passwordText);
    
    impostaLimite(limite,0,2,1,1,0,0); //etichetta File da inviare
    
    limite.fill = GridBagConstraints.NONE;
    
    limite.anchor = GridBagConstraints.EAST;
    
    grigliaAvanzata.setConstraints(fileDaInviareLabel,limite);
    
    pannello.add(fileDaInviareLabel);
    
    impostaLimite(limite,1,2,1,1,0,100); //campo File da inviare
    
    limite.fill = GridBagConstraints.HORIZONTAL;
    
    grigliaAvanzata.setConstraints(fileDaInviareText,limite);
    
    pannello.add(fileDaInviareText);
    
    impostaLimite(limite,0,3,2,1,0,50); // Pulsante
    
    limite.fill = GridBagConstraints.NONE;
    
    limite.anchor = GridBagConstraints.CENTER;
    
    grigliaAvanzata.setConstraints(pulsante,limite);
    
    pannello.add(pulsante);
    
    setContentPane(pannello); // rendiamo il pannello parte del nostro frame
    
    show(); // Visualizziamo il tutto!
    
    }
    
    
    
    
    
    public static void main(String argv[]) {
    
    Layout nf = new Layout();
    
    }
    
    }
    quello che nn capisco è che funzione ha e come funziona la stringa impostaLimite(limite,x,x,x,x,x,x,); presente ad ogni elemento della finestra.

    Per quanto ho capito il posizionamento degli elementi avviene specificando i punti cardinali, ma questo sembra che non basti e che bisogna tener presente una griglia che suddivide in 6 parti la finestra. Io questo non l'ho capito, se qualcuno di voi può aiutarmi gli sarò davvero riconoscente.


    P.S.
    Ho aperto questo thread dopo aver tentato di cercare nel forum altri thread simili, ma la ricerca nel forum è interrotta fino a lunedì.
    ...credi sia aria quella che stai respirando?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    328
    Credo che il posto migliore sia questo:

    http://developer.java.sun.com/develo.../AWTLayoutMgr/
    Il programmatore lo vedi dal coraggio, dall'altruismo, dalla fantasia...

  3. #3
    Utente di HTML.it L'avatar di MOBILUK
    Registrato dal
    Apr 2001
    Messaggi
    225
    ho letto accuratamente tutta la documentazione da te segnalata, e molte cose le ho chiarite, ma esercitandomi ho cmq inconstrato alcune difficoltà, infatti con il seguente codice non vengono visualizzati tutti e 3 i pulsanti che ho creato, ma ne viene visualizzato solo uno, ed è proprio quello che ho creato ma non inserito (pulsante3).

    codice:
    import javax.swing.*;
    import java.awt.*;
    
    
    
    public class class_name extends JFrame {
    
    private boolean inAnApplet = true;
    JButton pulsante1, pulsante2, pulsante3, gridbag, gridBag;
    JPanel p1, p2;
    
    
    public class_name() {
    
    getContentPane().setLayout(new GridLayout (1,3));
    setFont(new Font("Impact", Font.PLAIN, 14));
    
    
    p1 = new JPanel();
    p1.setLayout(new GridLayout(8,1));
    p2 = new JPanel();
    
    p1.setBackground(Color.blue);
    p2.setBackground(Color.red);
    getContentPane().add(p1);
    getContentPane().add(p2);
    
    gridBag = new JButton("pulsante1");
    gridBag = new JButton("pulsante2");
    gridBag = new JButton("pulsante3");
    
    p1.add(gridBag);
    p1.add(new JLabel("xxxxxx"));
    
    
    setSize(500, 300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    
    }
    
    public void gridBag(){
    
    GridBagConstraints c = new GridBagConstraints();
    GridBagLayout gridbag = new GridBagLayout();
    p2.setLayout(gridbag);
    
    c.fill = GridBagConstraints.BOTH;
    c.weightx = 0.0;
    c.gridwidth = GridBagConstraints.REMAINDER;
    
    JLabel top = new JLabel("JLabel top");
    top.setHorizontalAlignment(JLabel.CENTER);
    gridbag.setConstraints(top, c);
    p2.add(top);
    
    c.insets = new Insets(15, 0, 0, 0);
    c.fill = GridBagConstraints.NONE;
    c.gridwidth = GridBagConstraints.RELATIVE;
    pulsante1 = new JButton("Oracle");
    gridbag.setConstraints(pulsante1, c);
    p2.add(pulsante1);
    
    c.gridheight = 1;
    pulsante2 = new JButton("pulsante2");
    gridbag.setConstraints(pulsante2, c);
    p1.add(pulsante2);
    
    }
    
    public static void main (String args[])
    {
    
    JFrame class_name = new class_name();
    
    }
    
    
    
    }

    in esecuzione viene visualizzata solo una finistra divisa in due pannelli (uno blu a sinistra e uno rosso a destra), e in quello di sinistra compare il pulsante3, e al di sotto di quest'ultimo la JLabel xxxxx.

    E cmq leggendo la guida segnalata non ho cmq capito come usare i numeri nelle parentesi
    codice:
    c.insets = new Insets(15, 0, 0, 0);
    in altre guide ho notato che invece di essere 4 i numeri nella parentesi sono 6, mi sembra di avrer capito che siano parametri, ma non ho capito come usarli.


    ringrazio chiunque mi aiuti
    ...credi sia aria quella che stai respirando?

  4. #4
    Utente di HTML.it L'avatar di MOBILUK
    Registrato dal
    Apr 2001
    Messaggi
    225
    ...c'è nessuno? :quipy:
    ...credi sia aria quella che stai respirando?

  5. #5
    Non ho ben capito il tuo codice
    Questo :
    gridBag = new JButton("pulsante1");
    gridBag = new JButton("pulsante2");
    gridBag = new JButton("pulsante3");
    e poi il metodo gridBag() che non chiami mai ...

    codice:
    pulsante1 = new JButton("pulsante1");
    pulsante2 = new JButton("pulsante2");
    pulsante3 = new JButton("pulsante3");
    
    p1.add(pulsante1);
    p1.add(pulsante2);
    p1.add(pulsante3);
    eliminando i due gridBag fra le variabili di classe.
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  6. #6

    in altre guide ho notato che invece di essere 4 i numeri nella parentesi sono 6, mi sembra di avrer capito che siano parametri, ma non ho capito come usarli.
    E' strano dato che l'insets vuole i valori per:
    [list=1]
    top
    left
    bottom
    right[/list=1]

    In pratica imposti lo spazio che ci deve essere nelle varie direzioni.
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

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.