有时候我们会用到动态添加组件的情况。可以根据人们需要的组件以及组件个数来动态添加。
尝试了多次,在此记录一下,如果有什么不对或者更好的方案,还请大家赐教。
代码如下:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Test4 extends JFrame{
JTextField text; // 文本框(要输入单行文本的区域)
JPanel panel1,panel2; // 两个面板,panel1是窗体北部的面板,窗体其他部分为panel2面板
JButton button; // 一个按钮,当按下此按钮时,响应MyEvent事件
public Test4(){
this.setBounds(300,200,400,300); // 设置窗体大小
this.setLayout(new BorderLayout()); // 设置窗体的布局方式
text = new JTextField(15); // 新建文本框
button = new JButton("添加"); // 新建按钮
// 新建面板
panel1 = new JPanel();
panel2 = new JPanel();
// 在panel1中添加text文本框和button按钮
panel1.add(text);
panel1.add(button);
// 在窗体中添加panel1和panel2两个面板,并且设置panel1位于窗体北部
this.add(panel1,BorderLayout.NORTH);
this.add(panel2);
this.setVisible(true); // 显示窗体
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体可关闭
}
public void MyEvent(){
button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
String str = text.getText();
// System.out.println(str);
JButton test = new JButton(str);
// 在面板panel2中动态添加按钮
panel2.add(test);
// 重绘面板(重要重要重要)
panel2.revalidate();
/* 以下方式重绘面板均不可取
* panel2.paintImmediately(panel2.getX(), panel2.getY(), panel2.getWidth(), panel2.getHeight());
panel2.repaint();
*/
}
});
}
// 主函数
public static void main(String[] args){
new Test4();
}
}
显示结果:
只是,我这个代码有点儿问题,它添加了之后,只能在此次打开的窗口显示添加的内容,当重新打开窗口的时候,以前添加的组件都不见了。
暂时还没有找到解决办法。不过现在再考虑用表格添加组件,试试看能不能解决这一问题。