高级组件——表格模型TableModel
通常增删改表格,多使用表格模型,效率更高。具体通过DefaultTableModel类中的方法来实现。
TableModel接口——AbstractTableModel抽象类——DefaultTableModel类(addRow,setValueAt,removeRow)




import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; public class Demo extends JFrame {//窗体类
private DefaultTableModel model;//表格模型
private JTable table;//表格
private JButton addButton, delButton, updButton;//增删改三个按钮
private JTextField aTextField, bTextField;//按钮旁边的输入框 public Demo() {//窗体构造方法
setTitle("表格模型");
setBounds(100, 100, 400, 200);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); String[] columnNames = {"A", "B"};//定义表格列名
String[][] tableValues = {{"A1", "B1"}, {"A2", "B2"}, {"A3", "B3"}};//表格内容 model = new DefaultTableModel(tableValues, columnNames);//设置模型
table = new JTable(model);//引用模型,或table.setModel(model);
JScrollPane sc = new JScrollPane(table);
getContentPane().add(sc, BorderLayout.CENTER); buttonInit();//调用按钮,按钮初始化
addMyListener();//组件的监听事件
} private void buttonInit() {
final JPanel panel = new JPanel();//内部默认流布局
getContentPane().add(panel, BorderLayout.SOUTH);
panel.add(new JLabel("A:"));
aTextField = new JTextField("A4", 5);//文本框的内容和宽度
panel.add(aTextField);
panel.add(new Label("B:"));
bTextField = new JTextField("B4", 5);
panel.add(bTextField);
addButton = new JButton("增加");
delButton = new JButton("删除");
updButton = new JButton("修改");
panel.add(addButton);
panel.add(delButton);
panel.add(updButton);
} private void addMyListener() {
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String rowData[] = {aTextField.getText(), bTextField.getText()};
model.addRow(rowData);//在表格模型中增加一行内容(文本框内容)
int rowCount = table.getRowCount() + 1;//获取当前行数+1
aTextField.setText("A" + rowCount);//文本框中内容增1
bTextField.setText("B" + rowCount);
}
});
updButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int selectedRow = table.getSelectedRow();//获取被选中行的索引
if (selectedRow != -1) {//存在被选中行
model.setValueAt(aTextField.getText(), selectedRow, 0);//修改第1列的值
model.setValueAt(bTextField.getText(), selectedRow, 1);//修改第2列的值
}
}
});
delButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int selectedRow = table.getSelectedRow();
if (selectedRow != -1) {
model.removeRow(selectedRow);//删除选中的行
}
}
});
} public static void main(String[] args) {
Demo frame = new Demo();
frame.setVisible(true);
}
}
高级组件——表格模型TableModel的更多相关文章
- 高级组件——表格JTable
JTable(Object[][] rowData,Object[] columnNames) 表格数据 列名集合 setSe ...
- 表格模型的监听 TableModelListener
当表格内容发生改变,监听做了哪些操作,需要表格模型的监听 TableModelListener来实现. 以上一个随笔内容<高级组件——表格模型TableModel>为例,增加监听事件内容. ...
- 十六、Swing高级组件
1.利用JTable类直接创建表格 (1)创建表格 构造方法:JTable(Object rowData,Object[] columnNames) (2)定制表格 编辑:isCellEditable ...
- Ext.js高级组件
第二章:Ext.js高级组件 grid组件 普通方式 表格面板类Ext.grid.Panel xtype(别名):gridpanel.grid title标题.renderTo渲染至.width宽.h ...
- css高级选择器&盒模型
css高级选择器&盒模型 1.组合选择器 群组选择器 /* 每个选择器为可以为三种基础选择器的任意一个,用逗号隔开,控制多个*/ div,.div,#div{ color:red } 后代(子 ...
- Ext JS 6学习文档-第6章-高级组件
Ext JS 6学习文档-第6章-高级组件 高级组件 本章涵盖了高级组件,比如 tree 和 data view.它将为读者呈现一个示例项目为 图片浏览器,它使用 tree 和 data view 组 ...
- SSAS Tabular 表格模型建模(关系)及部署
一.表格建模(SSAS 表格) 表格模型是 Analysis Services 中的内存中数据库. 使用最先进的压缩算法和多线程查询处理器,xVelocity 内存中分析引擎 (VertiPaq) ...
- SSAS Tabular表格模型实现动态权限管理
最近忽然对SSAS产生了浓厚兴趣,我看博客园上也米有写关于SSAS 2016下表格模型实现动态权限管理的文章,最近鼓捣了一下微软的样例,鼓捣好了,把过程中遇到的一些问题写出来,抛砖引玉,也算给自己一个 ...
- UI高级组件
今天继续学习UI高级组件 网格视图 GridView 用GridView标签添加,显示网格视图,需要用到适配器,共有四种适配器 ArrayAdapter,SmipleAdapter,SmipleCou ...
随机推荐
- windows 安装tensorflow
原文知乎:https://zhuanlan.zhihu.com/p/25778703 前言 看到Rstudio中开始支持Tensorflow,本人是欣喜若狂的,同时TensorFlow官网从16年9月 ...
- 替换JDK 对eclipse的影响?
问题 替换原有的JDK 对 eclipse有影响么? 之前用的eclipse是32位的,我的电脑是64位的,装的JDK是也是32位的,所以不影响使用! 但是,前两天装了一个ideal,新配置了一个9 ...
- Vue之动态绑定CSS样式
demo.html <!DOCTYPE html> <html lang="en" xmlns:v-bind="http://www.w3.org/19 ...
- 二、启用Docker支持
一.使用
- centos无网络问题
- 不幸,我的Ryzen 7 1700X中招了,也有segfault
在历经了I7-5775C,I7-5820K之后,决定尝鲜用一下为AMD漂亮翻身的Ryzen 7,海淘了一颗Ryzen 7 1700X 最近听说在极重负载的情况下,CPU会出错,于是从网上找来Kill- ...
- Process 模块的方法
join from multiprocessing import Process import time, os def task(name): print('%s is running' % nam ...
- 【python练习题】程序17
#题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. s = input('请输入字符串:') alf = 0 space = 0 digi = 0 other = 0 for ...
- ImportError: No module named google.protobuf.internal
下载: protobuf-3.3.0 设置路径:export PYTHONPATH=/gruntdata/lihaiyang/local/protobuf-3.3.0/python:$PYTHONPA ...
- c++创建文件夹以及子文件夹
#ifdef WIN32 #include <io.h> #include <direct.h> #else #include <unistd.h> #includ ...