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

    GridBagLayout e dimensione celle

    Salve,
    ho un problema con il layout utillizzando il GridBagLayout.

    Posto l'img dell'applet che riesco ad ottenere:


    e quella che vorrei ottenere:


    I due quadratini alla destra della 2° img (che nella prima il secondo prende tutto lo spazio) sono 2 JButton.
    Il codice all'interno del metodo init() è questo:

    codice:
            c = getContentPane();
            c.setLayout(new GridBagLayout());
            GridBagConstraints cg = new GridBagConstraints();
            cg.fill = GridBagConstraints.HORIZONTAL;
    
            jTextField1 = new JTextField();
            jTextField1.setText("aaaaaa");
            jTextField1.setEditable(false);
            jTextField1.setBorder(null);
            cg.fill = GridBagConstraints.HORIZONTAL;
            cg.ipadx = 0;
            cg.weightx = 0.0;
            cg.gridx = 0;
            cg.gridy = 0;
            c.add(jTextField1, cg);
    
            jButton1 = new JButton("");
            jButton1.setMinimumSize(new Dimension(0, 0));
            jButton1.setSize(23,23);
            cg.fill = GridBagConstraints.HORIZONTAL;
            cg.anchor = GridBagConstraints.EAST;
            cg.ipadx = -13;
            cg.ipady = 7;
            cg.gridx = 1;
            cg.gridy = 0;
            c.add(jButton1, cg);
    
            jButton2 = new JButton("");
            jButton2.setMinimumSize(new Dimension(0, 0));
            jButton2.setSize(23,23);
            cg.fill = GridBagConstraints.HORIZONTAL;
            cg.anchor = GridBagConstraints.EAST;
            cg.ipadx = -13;
            cg.ipady = 7;
            cg.gridx = 2;
            cg.gridy = 0;
            c.add(jButton2, cg);
            
            jSeparator1 = new JSeparator();
            cg.ipady = 0;      
            cg.weightx = 0.0;
            cg.insets = new Insets(3,0,0,0);  
            cg.fill = GridBagConstraints.HORIZONTAL;
            cg.gridwidth = 3;     
            cg.gridx = 0;
            cg.gridy = 1;
            c.add(jSeparator1, cg);
    
            jTextArea1 = new JTextArea();
            jTextArea1.setColumns(20);
            jTextArea1.setRows(7);
            jTextArea1.setLineWrap(true);
            jScrollPane1 = new JScrollPane(jTextArea1);
            cg.fill = GridBagConstraints.HORIZONTAL;
            cg.ipady = 0;       
            cg.weighty = 0.0;   
            cg.insets = new Insets(3,0,0,0);  
            cg.gridx = 0;       
            cg.gridwidth = 3;   
            cg.gridy = 2;       
            c.add(jScrollPane1, cg);
    Praticamente la 1° cella in posizione 0,0 dovrebbe prendere tutta la larghezza possibile dopo aver ridimensionato i due bottoni, che sono rispettivamente nella celle 0,1 e 0,2 (come in fig 2 a differenza della fig 1).
    Vorrei sapere dove sbaglio e che cosa dovrei fare per ottenere il risultato voluto.

    Ringrazio già da ora chiunque possa essermi d'aiuto.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Non avevi settato correttamente il "peso" del componente sulla riga. Devi dare la precedenza alla label assegnando un valore piu' alto.
    codice:
            c = getContentPane();
            c.setLayout(new GridBagLayout());
            GridBagConstraints cg = new GridBagConstraints();
            cg.fill = GridBagConstraints.HORIZONTAL;
    
            jTextField1 = new JTextField();
            jTextField1.setText("aaaaaa");
            jTextField1.setEditable(false);
            jTextField1.setBorder(null);
            cg.fill = GridBagConstraints.HORIZONTAL;
            cg.ipadx = 0;
            cg.weightx = 1.0;
            cg.gridx = 0;
            cg.gridy = 0;
            c.add(jTextField1, cg);
    
            jButton1 = new JButton("");
            jButton1.setMinimumSize(new Dimension(0, 0));
            jButton1.setSize(23,23);
            cg.fill = GridBagConstraints.HORIZONTAL;
            cg.weightx = 0.0;
            cg.ipadx = -13;
            cg.ipady = 7;
            cg.gridx = 1;
            cg.gridy = 0;
            c.add(jButton1, cg);
    
            jButton2 = new JButton("");
            jButton2.setMinimumSize(new Dimension(0, 0));
            jButton2.setSize(23,23);
            cg.fill = GridBagConstraints.HORIZONTAL;
            cg.weightx = 0.0;
            cg.ipadx = -13;
            cg.ipady = 7;
            cg.gridx = 2;
            cg.gridy = 0;
            c.add(jButton2, cg);
            
            jSeparator1 = new JSeparator();
            cg.ipady = 0;      
            cg.weightx = 0.0;
            cg.insets = new Insets(3,0,0,0);  
            cg.fill = GridBagConstraints.HORIZONTAL;
            cg.gridwidth = 3;     
            cg.gridx = 0;
            cg.gridy = 1;
            c.add(jSeparator1, cg);
    
            jTextArea1 = new JTextArea();
            jTextArea1.setColumns(20);
            jTextArea1.setRows(7);
            jTextArea1.setLineWrap(true);
            jScrollPane1 = new JScrollPane(jTextArea1);
            cg.fill = GridBagConstraints.HORIZONTAL;
            cg.ipady = 0;       
            cg.weighty = 0.0;   
            cg.insets = new Insets(3,0,0,0);  
            cg.gridx = 0;       
            cg.gridwidth = 3;   
            cg.gridy = 2;       
            c.add(jScrollPane1, cg);

  3. #3
    Ti ringrazio moltissimo per la risposta.
    Avrei un'altra domandina per te, anche se nn è di vitale importanza come la precedente, ovvero:
    ho messo tutto quanto all'interno di un JPanel, altrimenti dopo aver settato i vari pesi le celle prendevano tutta la larghezza dell'applet piuttosto che essere di 300pxX300px, ma ora avrei necessità di mettere un padding interno al pannello di 3px in modo da ottenere graficamente la stessa cosa che si vede nell'img 2 (guarda sopra) ma contornato, a distanza di 3px, da un bordo nero.

    Ti ringrazio di nuovo.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Composizione di bordi. Crei un LineBorder nero, crei un EmptyBorder di spessore (3,3,3,3). Poi crei un CompoundBorder passandogli i due bordi sopra e lo applichi al pannello.
    Tutorial Sui Bordi
    API BorderFactory

  5. #5
    Dopo vado a dare un'occhiata ai 2 link che mi hai passato.
    Ti ringrazio veramente tanto.

  6. #6
    Scusa se continuo a chiederti cose..ma nn riesco a capire una cosa.
    Ora la mia applet si vede correttamente ma se vado a mettere un'immagine gif (16x16) in uno dei bottoni, questo mi si allarga in questo modo:


    Il codice utilizzato è lo stesso dei post precedenti ma con ipadx=0 e ipady=0.

    codice:
            jButton1 = new JButton("");
            jButton1.setMinimumSize(new Dimension(0, 0));
            jButton1.setSize(23,23);
            jButton1.setIcon(new ImageIcon("cancel.gif"));
            cg.fill = GridBagConstraints.HORIZONTAL;
            cg.weightx = 0.0;
            cg.ipadx = 0; //cg.ipadx = -13;
            cg.ipady = 0; //cg.ipady = 7;
            cg.gridx = 1;
            cg.gridy = 0;
            this.add(jButton1, cg);
    Ovviamente lo stesso vale se metto una caption ma questo dovrebbe essere normale in quanto il testo è troppo grande per il bottone.

    Ringrazio di nuovo chiunque possa aiutarmi.

    -------------------UPDATE-------------------

    Ho risolto mettendo:

    codice:
            jButton1.setContentAreaFilled(false);
            jButton1.setMargin(new Insets(0,0,0,0));

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.