Witam. Chcę wyswietlić elementy (JPanele z innymi komponentami) w moim oknie jeden pod drugim. JPanele maja tworzyć się w momencie dodawania kolejnych rekordów do Mapy (po wduszeniu przycisku). Okno ma się odświezac za kazdym razem, gdy dodaje nowy rekord. Problem jest w tym, że działa jednak kolejne elementyy wyświetla więcej niż raz - drugi rekord wyświetlony jest 2 razy, trzeci trzy i tak dalej. Coś namieszałem w pętlą - ktoś mógłby pomóc, podpowiedzieć gdzie robię błąd?
dla jasności: metoda startSwing() odpala okno; listWindow - moj JFrame, vehiclelist - Mapa
public void restRecords(){
ArrayList<JPanel> label = new ArrayList<>();
for (int i = 1; i < vehiclelist.size(); i++) {
if (vehiclelist.size() == 1) {
try {
startSwing();
} catch (IOException ex) {
throw new RuntimeException(ex);
}
}
JButton details3 = new JButton();
JPanel panel2 = new JPanel(new GridBagLayout());
details3 = new JButton("Details");
details3.addActionListener(this);
JLabel name2 = new JLabel("Name: " + fullname);
JLabel data2 = new JLabel(String.valueOf(currentdata));
JLabel label2 = new JLabel(licname);
label2.setIcon(new ImageIcon("images/tab.jpg"));
label2.setFont(new Font("Verdana", Font.PLAIN, 18));
label2.setHorizontalTextPosition(JLabel.CENTER);
label2.setVerticalTextPosition(JLabel.CENTER);
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
panel2.add(label2, gbc);
gbc.gridx++;
panel2.add(details3, gbc);
gbc.gridx = 0;
gbc.gridy++;
panel2.add(name2, gbc);
gbc.gridx++;
panel2.add(data2, gbc);
label.add(panel2);
buttonlist.put(details3,vehiclelist.get(licenseplate));
}
JPanel p = new JPanel();
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = gbc.HORIZONTAL;
gbc.weightx = 1;
gbc.gridwidth = GridBagConstraints.REMAINDER;
for(JPanel j:label) {
p.add(j,gbc);
}
gbc.weighty = 1;
listWindow.add(p);
listWindow.invalidate();
listWindow.validate();
listWindow.repaint();
System.out.println(vehiclelist);
}
oraz Action Listener
public void actionPerformed (ActionEvent e) {
if (source == button1) {
vehiclelist.put(licensePlate, vehicle);
restRecords();
}