#java #swing #jscrollpane #jtextarea
#java #качать #jscrollpane #jtextarea
Вопрос:
У меня следующая проблема, JScrollPane не отображается в JTextArea, и я не знаю почему? Я пробовал многими способами, но ничего, он не хочет мне показывать! Я поместил ниже часть кода. Все отображается правильно, JFame, JTextArea, текст внутри JTextArea, все без JScrollPane. Пожалуйста, кто-нибудь может мне помочь?
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 beautifuln";
}
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;
}
}
Я заранее благодарю вас!
Комментарии:
1. Я думаю, вам нужно взглянуть на как использовать области прокрутки —
JScrollPane
следует обернуть компонент, который вы хотите прокручивать, обычно это делается с помощью конструктора, но вы также можете использоватьJScrollPane#setViewportView
… НЕ используйтеadd
:/2. Можете ли вы быть более явным? Дайте мне более подробную информацию, например, некоторые строки кода и что заменить?
3.…
totalScrol=new JScrollPane(totalArea)
…4. Он существует в 12 строке моего кода, посмотрите на него: private final JScrollPane TOTALSCROLL=new JScrollPane(общая область, JScrollPane. VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); //здесь создается прокрутка, я не вижу никакой проблемы!
5. Хорошо, пропустил это, я предполагаю, что это
GroupLayout
. Итак, я изменил ваш код, чтобы использоватьGridBagLayout
и не имею никаких проблем. Хотя мне остается задаться вопросом, будет лиJTable
лучшим выбором по сравнению со всеми
Ответ №1:
panou_rezultate.setLayout(metoda());
panou_rezultate.add(totalScrol); //here is added scroll to panel
Посмотрите на весь код, сгенерированный вашей IDE при использовании GroupLayout
.
Существует множество видов сложного кода для определения ограничений, используемых GroupLayout
, а затем используется addComponent(...)
метод. Из-за этой сложности GroupLayout
обычно используется только сгенерированным IDE кодом.
Вы не можете просто использовать метод add(…) для добавления компонентов в макет группы.
Мы бы рекомендовали НЕ использовать IDE для генерации вашего кода макета. Тогда вы полностью контролируете ситуацию.
Прочитайте руководство Swing по менеджерам компоновки, чтобы найти рабочие примеры, чтобы начать.