JScrollPane non viene visualizzato su JTextArea

Aug 31 2020

Ho il prossimo problema, JScrollPane non appare su JTextArea e non so perché? Ho provato in molti modi ma niente, non me lo voglio mostrare! Metto sotto una parte del codice. Tutto appare correttamente, JFame, JTextArea, testo all'interno di JTextArea, tutto senza JScrollPane. Per favore, qualcuno può aiutarmi?

package pachet;

import java.awt.BorderLayout;
import java.awt.Container;
import java.util.ArrayList;
import javax.swing.GroupLayout;
import static javax.swing.GroupLayout.Alignment.BASELINE;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import static javax.swing.LayoutStyle.ComponentPlacement.RELATED;



public class Design {
    private final JFrame x;
    
    private final JPanel panou_rezultate=new JPanel();
    
    private final JLabel aziL=new JLabel("Azi");
    private final JLabel saptamanaL=new JLabel("Ultimile 7 zile");
    private final JLabel lunaL=new JLabel("Ultimile 30 zile");
    private final JLabel totalL=new JLabel("De la inceput");
        
    private final JTextArea aziArea=new JTextArea(30,60);
    private final JTextArea saptamanaArea=new JTextArea(30,60);
    private final JTextArea lunaArea=new JTextArea(30,60);
    private final JTextArea totalArea=new JTextArea(30,60);
    
    private final JScrollPane totalScrol=new JScrollPane(totalArea,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
        JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); //here it is created scroll

    public Design(JFrame x) {
        this.x = x;
        functie(); 
    }
    
    
    private void functie(){
       
        x.add(panou_rezultate,BorderLayout.CENTER);
       
        panou_rezultate.setLayout(metoda());
        
        panou_rezultate.add(totalScrol); //here is added scroll to panel
                
        PrelucrareDate y=new PrelucrareDate();
        aziArea.setText(y.getAziP());
        String abc="";
        for(int i=0; i<1000; i++){
            abc=abc+"she is beautiful\n";
        }
        totalArea.setText(abc);   //totalArea text area is filled by many sentences, so scroll must appear   
        
       
    }
   
   
    public GroupLayout metoda(){
        
        GroupLayout gl= new GroupLayout(panou_rezultate);
        panou_rezultate.setLayout(gl);
        
        gl.setAutoCreateGaps(true);
        gl.setAutoCreateContainerGaps(true);       
        
        GroupLayout.SequentialGroup sg=gl.createSequentialGroup();
        
            sg.addGroup(gl.createParallelGroup(GroupLayout.Alignment.CENTER)  //de schimbat
                    .addComponent(aziL)
                    .addComponent(aziArea)
                    );
            sg.addPreferredGap(RELATED, 
                        GroupLayout.DEFAULT_SIZE, 
                        Short.MAX_VALUE);
            sg.addGroup(gl.createParallelGroup(GroupLayout.Alignment.CENTER)  //de schimbat
                    .addComponent(saptamanaL)
                    .addComponent(saptamanaArea)
                    );
            sg.addPreferredGap(RELATED, 
                        GroupLayout.DEFAULT_SIZE, 
                        Short.MAX_VALUE);
            sg.addGroup(gl.createParallelGroup(GroupLayout.Alignment.CENTER)  //de schimbat
                    .addComponent(lunaL)
                    .addComponent(lunaArea)
                    );
            sg.addPreferredGap(RELATED, 
                        GroupLayout.DEFAULT_SIZE, 
                        Short.MAX_VALUE);
            sg.addGroup(gl.createParallelGroup(GroupLayout.Alignment.CENTER)  //de schimbat
                    .addComponent(totalL)
                    .addComponent(totalArea)
                    );
            sg.addPreferredGap(RELATED, 
                        GroupLayout.DEFAULT_SIZE, 
                        Short.MAX_VALUE);
             
        gl.setHorizontalGroup(sg);
        
        
        
        GroupLayout.ParallelGroup pg_etichete=gl.createParallelGroup(BASELINE);
        GroupLayout.ParallelGroup pg_arii_text=gl.createParallelGroup();
        
        
            pg_etichete.addComponent(aziL);
            pg_etichete.addComponent(saptamanaL);
            pg_etichete.addComponent(lunaL);
            pg_etichete.addComponent(totalL);
            
            pg_arii_text.addComponent(aziArea);
            pg_arii_text.addComponent(saptamanaArea);
            pg_arii_text.addComponent(lunaArea);
            pg_arii_text.addComponent(totalArea);
        

        GroupLayout.SequentialGroup sgv=gl.createSequentialGroup(); //secvential grup pe verticala
        
        sgv.addPreferredGap(RELATED, 
                        GroupLayout.DEFAULT_SIZE, 
                        Short.MAX_VALUE);
        sgv.addGroup(pg_etichete);
        sgv.addGroup(pg_arii_text);
        sgv.addPreferredGap(RELATED,25,25);
        
        gl.setVerticalGroup(sgv);
        
    return gl;    
    }
    
}

Ti ringrazio anticipatamente!

Risposte

camickr Aug 31 2020 at 14:54
    panou_rezultate.setLayout(metoda());
    panou_rezultate.add(totalScrol); //here is added scroll to panel

Guarda tutto il codice generato dal tuo IDE quando usi un file GroupLayout.

Esistono tutti i tipi di codice complesso per specificare i vincoli utilizzati da GroupLayoute quindi addComponent(...)viene utilizzato il metodo. A causa di questa complessità, in GroupLayoutgenere viene utilizzato solo dal codice generato dall'IDE.

Non è possibile utilizzare semplicemente il metodo add (...) per aggiungere componenti a un layout di gruppo.

La nostra raccomandazione sarebbe di NON utilizzare l'IDE per generare il codice del layout. Allora hai il pieno controllo.

Leggi il tutorial Swing sui gestori di layout per esempi di lavoro per iniziare.