学校的实验指导书的实现
1、运用表格模型创建如图所示的界面,为表格添加按钮事件:
(1)点击“插入”,取文本框中的数据插入表格的第一行;
(2)点击“添加”,取文本框的数据加到表格的最后一行;
(3)点击“删除”,删除当前选中的一行数据;
(4)点击“修改”,根据文本框数据更新表格数据。
结果图:
先了解一下JTable和DefaultTableModel
JTable
表格的实现。JTable 是用来显示和编辑常规二维单元表。 可以用数组或者集合来存储临时的信息。模拟数据库。
DefaultTableModel是AbstractTableModel的子类 是表格模型
话不多说 直接上代码
package Labbook08_3;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TableGUI {
//这一块是JFrame北部的部分
//信息的输入
JLabel number = new JLabel("班级:");
JTextField numtext = new JTextField(5);
JLabel stuid = new JLabel("学号:");
JTextField stuidtext = new JTextField(5);
JLabel name = new JLabel("姓名:");
JTextField nametext = new JTextField(5);
JLabel phone = new JLabel("电话:");
JTextField phonetext = new JTextField(11);
//下部的按钮
Button btchange = new Button("修改");
Button btadd = new Button("添加");
Button btdelete = new Button("删除");
Button btaddline = new Button("插入");
public void puttogether(){
JFrame jf = new JFrame("表格");
JPanel jp = new JPanel();
jp.add(number);
jp.add(numtext);
jp.add(stuid);
jp.add(stuidtext);
jp.add(name);
jp.add(nametext);
jp.add(phone);
jp.add(phonetext);
jf.add(jp, BorderLayout.NORTH);
//这一块是中间的表格
//列名
String[] tableTitle = {"班级","姓名","学号","电话"};
//数据
String [][]tableDate={
{"310201","朱溧1","2020130401","18652606256"},
{"310202","朱溧2","2020130402","18652606256"},
{"310203","朱溧3","2020130403","18652606256"}};
DefaultTableModel dtm = new DefaultTableModel(tableDate,tableTitle);
JTable table_want = new JTable(dtm);
//支持滚动
JScrollPane jsp = new JScrollPane(table_want);
jf.add(jsp,BorderLayout.CENTER);
//这一块是南边的按钮区域
JPanel jp2 = new JPanel();
jp2.add(btchange);
jp2.add(btadd);
jp2.add(btdelete);
jp2.add(btaddline);
jf.add(jp2,BorderLayout.SOUTH);
//避免出现窗口运行后需要拉一下窗口才显示 把JFrame的设置最后放
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jf.setBounds(500,500,600,500);
jf.setVisible(true);
//进行事件监听器的部分
//执行增加操作
btadd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String numtextText = numtext.getText();
String stuidtextText = stuidtext.getText();
String nametextText = nametext.getText();
String phonetextText = phonetext.getText();
String []newrow = {numtextText,stuidtextText,nametextText,phonetextText};
dtm.addRow(newrow);
clearthing();
}
});
//执行删除操作
btdelete.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int selectedRow = table_want.getSelectedRow();
dtm.removeRow(selectedRow);
String []newrow = {"","","",""};
dtm.addRow(newrow);
clearthing();
}
});
//执行插入操作
btaddline.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//行数和列数 从0开始
//获取信息
String numtextText = numtext.getText();
String stuidtextText = stuidtext.getText();
String nametextText = nametext.getText();
String phonetextText = phonetext.getText();
String []newrow = {numtextText,stuidtextText,nametextText,phonetextText};
dtm.insertRow(0,newrow);
clearthing();
}
});
//执行修改操作
btchange.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
/*首先是单元格被锁住无法修改
* 如果没有锁住 则双击单元格就可以进行修改
*
* 思路:
* 选中哪行 先删除 再插入*/
//获取信息
String numtextText = numtext.getText();
String stuidtextText = stuidtext.getText();
String nametextText = nametext.getText();
String phonetextText = phonetext.getText();
String []newrow = {numtextText,stuidtextText,nametextText,phonetextText};
//得到了选中的行
int selectedRow = table_want.getSelectedRow();
//删除选中的行
dtm.removeRow(selectedRow);
dtm.insertRow(selectedRow,newrow);
clearthing();
}
});
}
//这个方法是用来清除掉输入框里的文本
void clearthing(){
numtext.setText("");
nametext.setText("");
stuidtext.setText("");
phonetext.setText("");
}
public static void main(String[] args) {
new TableGUI().puttogether();
}
}
总结
我在表格里 没有设置单元格锁定 所以双击单元格是可以直接在单元格里进行修改
获取信息的方法我没有进行单独封装 是为了方便我都写在了一个类里 (不推荐)
事件处理我也是直接就写了(不推荐)
常见的一些方法在代码里已经写了 如果还有其他的需要可以去API里进行查询
如果有啥想问的可以留言 一起讨论