Итак, если вы правильно поняли, вы проблема в том, что вы не видите 20 новых панелей, только одну.
Проблема в том, что компонент может находиться только в одном контейнере, один раз, поэтомуделать что-то вроде ...
for (int i = 0; i < 20; i++) {
panel.add(panel2);
}
равносильно выполнению чего-то вроде ...
panel.add(panel2);
На самом деле вам нужно создавать новый экземпляр компонента на каждой итерацииloop
Я хотел бы предложить вам создать панель «обертка» или «карточка», которая может содержать два изображения.В моем тестировании я просто использовал цветные панели, но вы поняли ...
public class WrapperPane extends JPanel {
public WrapperPane() {
setLayout(new FlowLayout());
add(makePanel(Color.RED));
add(makePanel(Color.GREEN));
// This is just for demonstration purposes
setBorder(new LineBorder(Color.DARK_GRAY));
}
protected JPanel makePanel(Color background) {
JPanel panel = new JPanel();
panel.setBackground(background);
panel.setPreferredSize(new Dimension(100, 100));
return panel;
}
}
Вы просто должны сделать что-то вроде ...
JTextField text = new JTextField();
JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(5, 4));
for (int i = 0; i < 20; i++) {
panel.add(new WrapperPane());
}
frame.add(text, BorderLayout.NORTH);
frame.add(panel, BorderLayout.CENTER);
// Don't do this, just let the content make it's own
// calculations
//frame.setPreferredSize(new Dimension(1280, 700));
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
И выв конечном итоге что-то вроде ...