JScrollPane não aparece em JTextArea
Tenho o próximo problema, JScrollPane não aparece em JTextArea e não sei por quê? Tentei de várias maneiras mas nada, não quer me mostrar! Coloquei abaixo uma parte do código. Tudo aparece corretamente, JFame, JTextArea, texto dentro de JTextArea, tudo sem JScrollPane. Por favor, alguém pode me ajudar?
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;
}
}
Eu agradeço antecipadamente!
Respostas
panou_rezultate.setLayout(metoda());
panou_rezultate.add(totalScrol); //here is added scroll to panel
Observe todo o código gerado pelo seu IDE ao usar um GroupLayout.
Existem todos os tipos de código complexo para especificar as restrições usadas pelo GroupLayoute então o addComponent(...)método é usado. Devido a essa complexidade, o GroupLayouté normalmente usado apenas pelo código gerado pelo IDE.
Você não pode simplesmente usar o método add (...) para adicionar componentes a um layout de grupo.
Nossa recomendação seria NÃO usar o IDE para gerar seu código de layout. Então você está no controle total.
Leia o tutorial Swing sobre Gerenciadores de Layout para exemplos de trabalho para você começar.