Como adicionar dinamicamente componentes ao Java JScrollPane
Estou tentando criar um aplicativo GUI em Java, mas estou tendo problemas para adicionar / atualizar componentes dinamicamente no JScrollPane. Eu tenho dois JPanels (P1 e P2) nos quais P1 tem um formulário para definir parâmetros para aplicação e o P2 contém alguns componentes da GUI, que são atualizados dinamicamente com base nos valores no P1. Eu preciso de um JScrollPane no P2 para rolar, então adicionei o JScrollPane no P2. Adicionei P1 e P2 a um painel principal "main" e, em seguida, adicionei o painel principal a um quadro. Mas os componentes não são atualizados no P2. Alguém pode sugerir qual é o problema? Chamei revalidate (), repintar () e alguns outros métodos, mas a GUI não é atualizada. Abaixo está um código de exemplo que escrevi apenas para ilustrar meu problema. Eu preciso do GroupLayout no meu aplicativo, então aqui também usei o GroupLayout
import java.awt.event.ActionEvent;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class JframeExample extends JFrame {
private final JPanel P1;
private final JPanel P2;
private final JPanel main;
private final JScrollPane scrol;
private final JButton jButton;
private final JButton jButton2;
public JframeExample() {
P1 = new JPanel();
P2 = new JPanel();
main = new JPanel();
jButton = new JButton("Add");
jButton2 = new JButton("Remove");
scrol = new JScrollPane();
initialize();
this.add(main);
this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
this.setSize(400, 400);
this.setVisible(true);
}
public static void main(String[] args) {
JframeExample jframeExample = new JframeExample();
}
private void addPressed(ActionEvent evt) {
System.out.println("Add Pressed");
scrol.add(new JButton());
revalidate();
}
private void removePressed(ActionEvent evt) {
System.out.println("Remove Pressed");
scrol.removeAll();
revalidate();
}
private void initialize() {
GroupLayout layout = new GroupLayout(P1);
P1.setLayout(layout);
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);
GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
hGroup.addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
.addComponent(jButton).addComponent(jButton2));
layout.setHorizontalGroup(hGroup);
GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
vGroup.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(jButton))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(jButton2));
layout.setVerticalGroup(vGroup);
P2.add(scrol);
jButton.addActionListener((ActionEvent evt) -> {
addPressed(evt);
});
jButton2.addActionListener((ActionEvent evt) -> {
removePressed(evt);
});
GroupLayout layoutMain = new GroupLayout(main);
main.setLayout(layoutMain);
layoutMain.setAutoCreateGaps(true);
layoutMain.setAutoCreateContainerGaps(true);
layoutMain.setHorizontalGroup(layoutMain.createSequentialGroup()
.addComponent(P1).addComponent(P2));
layoutMain.setVerticalGroup(layoutMain
.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(P1)
.addComponent(P2));
}
}