JAVA语言在窗体中动态添加按钮组件并重绘jpanel面板

有时候我们会用到动态添加组件的情况。可以根据人们需要的组件以及组件个数来动态添加。

尝试了多次,在此记录一下,如果有什么不对或者更好的方案,还请大家赐教。

代码如下:

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();
	}
}
显示结果:

JAVA语言在窗体中动态添加按钮组件并重绘jpanel面板_第1张图片

只是,我这个代码有点儿问题,它添加了之后,只能在此次打开的窗口显示添加的内容,当重新打开窗口的时候,以前添加的组件都不见了。

暂时还没有找到解决办法。不过现在再考虑用表格添加组件,试试看能不能解决这一问题。

你可能感兴趣的:(JAVA_STUDY)