У меня есть код, который создает JPanel
с именем mainPanel
. Я установил, что JPanel
отделен от JScrollPane
, называемого scrollableTextArea
.
В этом методе у меня есть цикл for, который добавляет новые экземпляры класса QuestionComponent
в эту JPanel. Этот класс QuestionComponent
расширяет JPanel и добавляет их в виде сетки, изменяя ось Y в зависимости от количества QuestionComponents.
Проблема в том, что scrollPanel
не будет прокручиваться внизк JPanels ниже, даже если они были добавлены к mainPanel
.
public static void init_main_gui(JFrame frame) {
JPanel mainPanel = new JPanel();
mainPanel.setBackground(new java.awt.Color(240,240,240));
mainPanel.setSize(50, 100);
mainPanel.setLayout(null);
frame.add(mainPanel);
JScrollPane scrollableTextArea = new JScrollPane(mainPanel);
scrollableTextArea.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollableTextArea.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollableTextArea.setBounds(0, 0, 700, 800);
frame.getContentPane().add(scrollableTextArea);
for (int i = 10; i > 0; i--) {
mainPanel.add(new QuestionComponent("This is question #1", new ArrayList<String>()));
}
// Effectively makes any instance of this class a new JPanel
public class QuestionComponent extends JPanel{
private static final long serialVersionUID = -3786858516685867503L;
static int questionCount = 0;
QuestionComponent(String question, ArrayList<String> answers){
questionCount ++;
this.setLayout(null);
this.setBackground(new java.awt.Color(220,220,220));
// Y value is changed here based on the amount of question components
this.setBounds(0, (questionCount*310)-150, 700, 300);
JTextArea questionText = new JTextArea();
questionText.setText("Text Place Holder");
questionText.setFont(new Font("Subtotal",Font.PLAIN, 15));
questionText.setForeground(Color.black);
questionText.setLineWrap(true);
questionText.setBounds(0, 0, 585, 150);
questionText.setEditable(false);
questionText.setBackground(null);
this.add(questionText);
System.out.println("Created new instance: "+((questionCount*310)-150));
}
}