Eccessivo spazio tra jLabel e jPanel in GridBagLayout

di il
4 risposte

Eccessivo spazio tra jLabel e jPanel in GridBagLayout

Non riesco a risolvere in nessun modo questo problema, ho un pannello in cui ho impostato un GridBagLayout, di seguito trovate il codice; succede che inserendo in una riga una label e subito dopo un jpanel (in cui vado a fare altre operazioni), tra i due appare uno spazio troppo ampio. Ho impostato il fill della GridBagConstraints come BOTH ma il pannello non subisce cambiamenti, ho provato con l'insets impostandolo a 0 su top ma nulla uguale, non succede nulla. Cosa è che mi sfugge? Forse è un problema riguardante il JPanel? Qualcuno sa aiutarmi?

		JLabel titleTest = new JLabel("Testimonianze dei nostri clienti");
		gc.insets.bottom = 0;
		gc.gridx = 1;
		gc.gridy = 5;
		gc.anchor = GridBagConstraints.LINE_START;
		c.add(titleTest, gc);
		
		JPanel test = new JPanel();
		gc.gridx = 0;
		gc.gridy = 6;
		gc.gridwidth = 3;
		gc.fill = GridBagConstraints.BOTH;
		test.setBorder(BorderFactory.createLineBorder(Color.BLACK));
		test.setLayout(new GridBagLayout());
		GridBagConstraints gctest = new GridBagConstraints();
		c.add(test, gc);
		
		int i;
		int n = 0;
		if(testimonianze.size() > 0)
		{	
			for(i=0; i<testimonianze.size(); i++)
			{
				Testimonianza t = new Testimonianza();
				t = testimonianze.get(i);
				
				JLabel nomeTesserato = new JLabel("Da " + t.getTesserato().getNome());
				gctest.gridx = 0;
				gctest.gridy = n;
				gctest.fill = GridBagConstraints.BOTH;
				gctest.insets.top = 5;
				gctest.anchor = GridBagConstraints.LINE_START;
				test.add(nomeTesserato, gctest);
				
				JLabel titolo = new JLabel('"' + t.getTitolo() + '"');
				titolo.setFont(new Font(null,Font.ITALIC,16));
				gctest.gridx = 0;
				gctest.gridy = n+1;
				gctest.gridwidth = 3;
				gctest.anchor = GridBagConstraints.LINE_START;
				test.add(titolo, gctest);
				
				JTextArea text = new JTextArea(t.getDescrizione(), 3, 45);
				gctest.gridx = 0;
				gctest.gridy = n+2;
				gctest.gridwidth = 3;
				gctest.anchor = GridBagConstraints.LINE_START;
				text.setLineWrap(true);
				text.setEditable(false);
				text.setBackground(new Color(255, 255, 255, 0));
				test.add(text, gctest);
				
				n=n+3;
			}
		}
		else
		{
			JLabel noTest = new JLabel("Nessun cliente ha scritto una testimonianza...");
			gctest.gridx = 1;
			gctest.gridy = n;
			gctest.gridwidth = 3;
			gctest.anchor = GridBagConstraints.CENTER;
			noTest.setFont(new Font(null,Font.ITALIC ,16));
			test.add(noTest, gctest);
		}
		

4 Risposte

  • Re: Eccessivo spazio tra jLabel e jPanel in GridBagLayout

    Se intendi lo spazio tra due diverse testimonianze dovrebbe dipendere dal fatto che passi al costruttore di JTextArea 3 per il numero di righe, quindi vedi in effetti uno spazio pari circa a 2 righe vuote. Prova a impostare solo una riga ...
  • Re: Eccessivo spazio tra jLabel e jPanel in GridBagLayout

    Ansharja ha scritto:


    Se intendi lo spazio tra due diverse testimonianze dovrebbe dipendere dal fatto che passi al costruttore di JTextArea 3 per il numero di righe, quindi vedi in effetti uno spazio pari circa a 2 righe vuote. Prova a impostare solo una riga ...
    No no quello è perfetto, intendo dire lo spazio tra la JLabel in cui c'è scritto "Testimonianze dei nostri clienti" e il JPanel che ho chiamato "test". Ho postato solo un pezzo di codice, queste due cose sono posizionate all'interno di un panel principale che ha un GridBagLayout. Il problema è che gli altri componenti si posizionano bene, mentre solo tra questi due c'è uno spazio enorme che non riesco a ridurre in nessun modo.
  • Re: Eccessivo spazio tra jLabel e jPanel in GridBagLayout

    Allora dovresti postare più codice (in generale cerca di mettere già subito un esempio compilabile ed eseguibile, così si risolve in molto meno tempo) perché aggiungendo l'essenziale per compilare ed eseguire io non ottengo nessuna distanza, sono perfettamente attaccati ...

    Ho fatto copia incolla e aggiunto poche righe:
    
    import java.awt.*;
    import java.util.ArrayList;
    import javax.swing.*;
    public class TestDistanza
    {
    	public static void main (String [] args) {
    	  JFrame frame = new JFrame ("Test");
    	  JPanel c = new JPanel (new GridBagLayout ());
    	  GridBagConstraints gc = new GridBagConstraints ();
    	  
    	  JLabel titleTest = new JLabel("Testimonianze dei nostri clienti");
          gc.insets.bottom = 0;
          gc.gridx = 1;
          gc.gridy = 5;
          gc.anchor = GridBagConstraints.LINE_START;
          c.add(titleTest, gc);
          JPanel test = new JPanel();
          gc.gridx = 0;
          gc.gridy = 6;
          gc.gridwidth = 3;
          gc.fill = GridBagConstraints.BOTH;
          test.setBorder(BorderFactory.createLineBorder(Color.BLACK));
          test.setLayout(new GridBagLayout());
          GridBagConstraints gctest = new GridBagConstraints();
          c.add(test, gc);
          int i;
          int n = 0;
    	  
    	  ArrayList <Testimonianza> testimonianze = new ArrayList <Testimonianza> ();
    	  testimonianze.add (new Testimonianza (new Tesserato ("Pippo"), "Terrore", "La peggiore esperienza della mia vita, spaventoso !!"));
    	  testimonianze.add (new Testimonianza (new Tesserato ("Pluto"), "Noioso", "Il tempo non passava mai ..."));
    	  
    	  if(testimonianze.size() > 0)
          {   
             for(i=0; i<testimonianze.size(); i++)
             {
                Testimonianza t = testimonianze.get(i);
                JLabel nomeTesserato = new JLabel("Da " + t.getTesserato().getNome());
                gctest.gridx = 0;
                gctest.gridy = n;
                gctest.fill = GridBagConstraints.BOTH;
                gctest.insets.top = 5;
                gctest.anchor = GridBagConstraints.LINE_START;
                test.add(nomeTesserato, gctest);
                JLabel titolo = new JLabel('"' + t.getTitolo() + '"');
                titolo.setFont(new Font(null,Font.ITALIC,16));
                gctest.gridx = 0;
                gctest.gridy = n+1;
                gctest.gridwidth = 3;
                gctest.anchor = GridBagConstraints.LINE_START;
                test.add(titolo, gctest);
                JTextArea text = new JTextArea(t.getDescrizione(), 3, 45);
                gctest.gridx = 0;
                gctest.gridy = n+2;
                gctest.gridwidth = 3;
                gctest.anchor = GridBagConstraints.LINE_START;
                text.setLineWrap(true);
                text.setEditable(false);
                text.setBackground(new Color(255, 255, 255, 0));
                test.add(text, gctest);
                n=n+3;
             }
          }
          else
          {
             JLabel noTest = new JLabel("Nessun cliente ha scritto una testimonianza...");
             gctest.gridx = 1;
             gctest.gridy = n;
             gctest.gridwidth = 3;
             gctest.anchor = GridBagConstraints.CENTER;
             noTest.setFont(new Font(null,Font.ITALIC ,16));
             test.add(noTest, gctest);
          }
    	  
    	  frame.setContentPane (c);
    	  frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    	  frame.pack ();
    	  frame.setLocationRelativeTo (null);
    	  frame.setVisible (true);
    	}
    }
    class Testimonianza
    {
    	private String titolo, descrizione;
    	private Tesserato tesserato;
    	
    	Testimonianza (Tesserato tesserato, String titolo, String descrizione) {
    		this.tesserato = tesserato;
    		this.titolo = titolo;
    		this.descrizione = descrizione;
    	}
    	public Tesserato getTesserato () {
    		return tesserato;
    	}
    	public String getTitolo () {
    		return titolo;
    	}
    	public String getDescrizione () {
    		return descrizione;
    	}
    }
    class Tesserato
    {
    	private String nome;
    	
    	public Tesserato (String nome) {
    		this.nome = nome;
    	}
    	public String getNome () {
    		return nome;
    	}
    }   
    
    E ottengo questo risultato:
    Allegati:
    Screenshot della GUI
    Screenshot della GUI
  • Re: Eccessivo spazio tra jLabel e jPanel in GridBagLayout

    Ho risolto, non mi ero accorta che assegnavo alla GridBagConstraints il valore gridheigth = 3 al componente che precede la label e quindi rimaneva così per tutti i suoi successivi. Grazie comunque!
Devi accedere o registrarti per scrivere nel forum
4 risposte