java -如何在单击时动态地向gui添加swing组件?

时间:2023-01-19 15:37:11

What I am looking to do is a similar principle to adding attachments to emails, you can click a button and a new browse box would open increasing the number of separate attachments you can have.

我想做的是一个类似于向电子邮件添加附件的原则,您可以单击一个按钮,新的浏览框将打开,增加您可以拥有的独立附件的数量。

I'm fairly new so if someone could point me towards an example?

如果有人能给我举个例子,我就算是新手了?

5 个解决方案

#1


33  

Sample code to add Buttons on the fly dynamically.

动态添加按钮的示例代码。

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

Full code:

完整的代码:

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();
    }
}

#2


9  

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);
}

java -如何在单击时动态地向gui添加swing组件?

#3


0  

Component was not visible until setSize() was called:

在调用setSize()之前,组件不可见:

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

#4


0  

panel.add(button);

panel.add(按钮);

panel.revalidate();

panel.revalidate();

panel.repaint();

panel.repaint();

#5


0  

Java : Dynamically add swing components

Java:动态添加swing组件。

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<count;i++)
 {
     //cnt++;
     //lblcount.setText("Count : "+cnt);
     JTextField txtcolnm=new JTextField("",20);
     JComboBox cmbtype=new JComboBox();
     JTextField txtcolsize=new JTextField("",20);

     JButton Drop_Table_Field = new JButton(new ImageIcon(Drop_Tablefield));

     cmbtype.addItem("INTEGER"); cmbtype.addItem("FLOAT");
     cmbtype.addItem("STRING");  cmbtype.addItem("BOOLEAN");

     colnamepanel.add(txtcolnm);   colnamepanel.add(cmbtype);
     colnamepanel.add(txtcolsize); colnamepanel.add(Drop_Table_Field);

     colnamepanel.setAutoscrolls(true);

     //refresh panel
     colnamepanel.revalidate();
     colnamepanel.repaint();

     //set the layout on Jpanel
     colnamepanel.setLayout(new FlowLayout(FlowLayout.LEFT,5,0));
  }//end for loop
 }//end method

#1


33  

Sample code to add Buttons on the fly dynamically.

动态添加按钮的示例代码。

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

Full code:

完整的代码:

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();
    }
}

#2


9  

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);
}

java -如何在单击时动态地向gui添加swing组件?

#3


0  

Component was not visible until setSize() was called:

在调用setSize()之前,组件不可见:

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

#4


0  

panel.add(button);

panel.add(按钮);

panel.revalidate();

panel.revalidate();

panel.repaint();

panel.repaint();

#5


0  

Java : Dynamically add swing components

Java:动态添加swing组件。

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<count;i++)
 {
     //cnt++;
     //lblcount.setText("Count : "+cnt);
     JTextField txtcolnm=new JTextField("",20);
     JComboBox cmbtype=new JComboBox();
     JTextField txtcolsize=new JTextField("",20);

     JButton Drop_Table_Field = new JButton(new ImageIcon(Drop_Tablefield));

     cmbtype.addItem("INTEGER"); cmbtype.addItem("FLOAT");
     cmbtype.addItem("STRING");  cmbtype.addItem("BOOLEAN");

     colnamepanel.add(txtcolnm);   colnamepanel.add(cmbtype);
     colnamepanel.add(txtcolsize); colnamepanel.add(Drop_Table_Field);

     colnamepanel.setAutoscrolls(true);

     //refresh panel
     colnamepanel.revalidate();
     colnamepanel.repaint();

     //set the layout on Jpanel
     colnamepanel.setLayout(new FlowLayout(FlowLayout.LEFT,5,0));
  }//end for loop
 }//end method