有关Java Swing动态增加组件
图1是我的界面,我想实现的是点击增加按钮后,“字符i--txti,列名i--txti”,都动态地往下增加一行。在按钮里实现增加组件时,想不出怎么把按钮的名字写活来。就比如...
图1是我的界面,我想实现的是点击增加按钮后,“字符i--txti, 列名i--txti ”,都动态地往下增加一行。在按钮里实现增加组件时,想不出怎么把按钮的名字写活来。就比如图2,我写了一个jLable Word4,位置放在jLable Word3的下面+40px处,虽然实现了目的,但是lable的名字 word4是写死的,我想利用参数 i 把它写活来,就可以无限增加行,并且可以获取到里面的值。怎么写活呢。。
展开
2个回答
展开全部
效果图
参考代码
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//本类继承自JFrame 实现了 ActionListener接口
public class DemoFrame1 extends JFrame implements ActionListener {
JPanel jpc ;//存放组件的面板
JScrollPane jsp;//滚动面板
JButton jbAdd ,jbRemove,jbReset;// 增加,删除按钮
int index = 1;//开始的字符
//构造函数
public DemoFrame1() {
jpc = new JPanel();
jpc.setLayout(new BoxLayout(jpc, BoxLayout.Y_AXIS));//盒子布局.从上到下
jsp = new JScrollPane(jpc,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
add(jsp);
jbAdd = new JButton("增加");
jbAdd.addActionListener(this);
jbRemove = new JButton("删除");
jbRemove.addActionListener(this);
jbReset = new JButton("重置");
jbReset.addActionListener(this);
JPanel jps = new JPanel();
jps.add(jbAdd);
jps.add(jbRemove);
jps.add(jbReset);
add(jps,BorderLayout.SOUTH);
setTitle("增删组件");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300, 220);//大小
setLocationRelativeTo(null);//居中
}
//main函数
public static void main(String[] args) {
new DemoFrame1().setVisible(true);//初始化并可见
}
@Override
public void actionPerformed(ActionEvent e) {
JButton jb = (JButton) e.getSource();
if(jb==jbAdd) {//当点击添加按钮时
jpc.add(new MyJPanel(index));//添加1个自己定义的面板组件
index++;//自加1
myUpdateUI();//刷新界面
}else if(jb ==jbRemove) {//当点击删除按钮时
if(jpc.getComponentCount()>0) { // 得到jpc里的MyJPanel的组件数量
jpc.remove(jpc.getComponentCount()-1);//删除末尾的一个组件 ,
index-=1;
myUpdateUI();
}
}else if(jb==jbReset) {
for (int i = 0; i < jpc.getComponentCount(); i++) {
MyJPanel mjp = (MyJPanel) jpc.getComponent(i);
//也就是说取值,可以根据文本框所在的位置来取
System.out.println("第"+(i+1)+"个文本框的值是"+mjp.getJTFValue());
mjp.setJTFValue("");//清空,重置
System.out.println("第"+(i+1)+"个文本框的值已清空重置");
}
}
}
//刷新界面函数
private void myUpdateUI() {
SwingUtilities.updateComponentTreeUI(this);//添加或删除组件后,更新窗口
JScrollBar jsb = jsp.getVerticalScrollBar();//得到垂直滚动条
jsb.setValue(jsb.getMaximum());//把滚动条位置设置到最下面
}
}
//自定义一个JPanle类
class MyJPanel extends JPanel{
public JTextField jtf;
public MyJPanel(int index) {
JLabel jl = new JLabel("字符"+index);
jtf = new JTextField(15);
add(jl);
add(jtf);
}
//获取文本框的值
public String getJTFValue() {
return jtf.getText();
}
//设置文本框的值
public void setJTFValue(String value) {
jtf.setText(value);
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询