java – ¿Cómo podría agregar dinámicamente el componente swing a la interfaz gráfica de usuario al hacer clic?

Lo que quiero hacer es un principio similar al de agregar archivos adjuntos a los correos electrónicos, puede hacer clic en un botón y se abrirá un nuevo cuadro de diálogo para boost la cantidad de archivos adjuntos que pueda tener.

Soy bastante nuevo, ¿así que si alguien pudiera señalarme como un ejemplo?

Código de muestra para agregar botones sobre la marcha dinámicamente.

panel.add(new JButton("Button")); validate(); 

Código completo:

 import javax.swing.JFrame; import javax.swing.JButton; import javax.swing.JPanel; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.FlowLayout; import java.awt.BorderLayout; public class AddComponentOnJFrameAtRuntime extends JFrame implements ActionListener { JPanel panel; public AddComponentOnJFrameAtRuntime() { super("Add component on JFrame at runtime"); setLayout(new BorderLayout()); this.panel = new JPanel(); this.panel.setLayout(new FlowLayout()); add(panel, BorderLayout.CENTER); JButton button = new JButton("CLICK HERE"); add(button, BorderLayout.SOUTH); button.addActionListener(this); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500, 500); setVisible(true); } public void actionPerformed(ActionEvent evt) { this.panel.add(new JButton("Button")); this.panel.revalidate(); validate(); } public static void main(String[] args) { AddComponentOnJFrameAtRuntime acojfar = new AddComponentOnJFrameAtRuntime(); } } 
  • Recurso
 public static void main(String[] args) { final JFrame frame = new JFrame("Test"); frame.setLayout(new GridLayout(0, 1)); frame.add(new JButton(new AbstractAction("Click to add") { @Override public void actionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { frame.add(new JLabel("Bla")); frame.validate(); frame.repaint(); } }); } })); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 300); frame.setVisible(true); } 

captura de pantalla

El componente no era visible hasta que se llamó a setSize() :

 component.setSize(100,200); jPanel.add(component); jPanel.revalidate(); jPanel.repaint(); 

panel.add (botón);

panel.revalidate ();

panel.repaint ();

Java: agregue dinámicamente componentes oscilantes

 for Example : count=3 //Java Swing: Add Component above method public void dya_addcomp(int count) { //Dynamicaly Delete Image_icon BufferedImage Drop_Tablefield = null; try { Drop_Tablefield = ImageIO.read(this.getClass().getResource("/images/drop.png")); } catch (IOException ex) { msg(" Error: drop and edit icon on Table, "+ex); } //count Items: 3 times for loop executed.. for(int i=0;i