你好,在吗使用JTable AbstractTableModel显示数据,谁会的找我啊,我在这里先谢谢了。
2条回答 默认 最新
- 唯一的小彬哥 2021-09-14 15:27关注
我自己研究swing好多年,有很多组件我都有自己封装的代码,其中JTable我有自己的封装。封装后非常简单,三到4行代码就可以完成数据的创建和添加。并且可以根据内容自适应列宽,调整列宽后记忆宽度,字段列名映射等功能。你如果需要可以联系我发你
如果你不需要封装好的,你可以参考我的DEMO来自己写,这个demo中TableModel也稍微封装了一下。继承的
DefaultTableModel,DefaultTableModel则是继承与AbstractTableModel,很简单,这个例子应该是可以直接运行的。/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.bin.test; import com.bin.component.table.TableModel; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.UIManager; import javax.swing.WindowConstants; /** * * @author wydxbg */ public class JTableTest extends JFrame { public static void main(String[] arg) { EventQueue.invokeLater(new Runnable() { public void run() { new JTableTest().setVisible(true); } }); } public JTableTest() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception ex) { } setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置关闭的行为 setPreferredSize(new Dimension(800, 600));//设置组件的大小 setSize(new Dimension(800, 600));//设置组件的大小 GridBagLayout layout = new GridBagLayout();//定义网格包布局 setLayout(layout);//设置布局为网格包布局 initComponents();//这是初始化组件的代码 addTableData();//你关心的添加数据代码在这里 } private JScrollPane scrollPane = new JScrollPane();//创建滚动面板 private JTable table = new JTable();//创建JTABLE private TableModel model = new TableModel();//创建TABLE的model private void initComponents() { GridBagConstraints gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.BOTH;//网格包拉伸模式为全部,也就是会向上下和左右拉伸 gbc.weightx = 1d;//X方向拉伸的权重 gbc.weighty = 1d;//y方向的拉伸权重 table.setModel(model);//将table的model替换为 TableModel scrollPane.setViewportView(table);//将table添加到滚动面板,这样数据量比较多的时候可以有滚动条 add(scrollPane, gbc);//添加组件到JFrame } private void addTableData() { model.addColumn("添加列1");//添加标题 model.addColumn("添加列2");//添加标题 Object[] value1 = new Object[]{'1','2'}; model.addRow(value1);//添加数据 Object[] value2 = new Object[]{'a','b'}; model.addRow(value2);//添加数据 } } package com.bin.component.table; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.swing.table.DefaultTableModel; public class TableModel extends DefaultTableModel { public TableModel() { } private Map<Integer, Class> columnClass = new HashMap<Integer, Class>(); public void setColumnClass(int column, Class classType) { columnClass.put(column, classType); } /** * 控制指定单元格是否可编辑,目前默认所有的均不可编辑 * * @param row * @param column * @return */ public boolean isCellEditable(int row, int column) { return isCellEditable; } private boolean isCellEditable = false; /*设置表格的每一列均可编辑**/ public void setAllCellEditable(boolean isEditable) { isCellEditable = isEditable; } //根据列名和行号获取数据 public String getStringValueAt(int row, String columnName) { return getValueAt(row, columnName) == null ? null : getValueAt(row, columnName).toString(); } //根据列号和行号获取数据 public String getStringValueAt(int row, int column) { return getValueAt(row, column) == null ? null : getValueAt(row, column).toString(); } //根据列名和行号获取数据 public Object getValueAt(int row, String columnName) { for (int i = 0; i < getColumnCount(); i++) { if (columnName.equals(getColumnName(i))) { return getValueAt(row, i); } } return null; } //根据列号和行号获取数据 @Override public Object getValueAt(int row, int column) { if (getRowCount() == 0 || row < 0 || column < 0) { return null; } if(row>=getRowCount()&&column>=getColumnCount()){ return null; } Object value; if (valueRenders.size() > 0) { for (int i = 0; i < valueRenders.size(); i++) { if (valueRenders.get(i).index == column) { value = valueRenders.get(i).getValue(super.getValueAt(row, valueRenders.get(i).index)); if (value != null) { return value; } } } } return super.getValueAt(row, column); } //对指定单元格设置数据 @Override public void setValueAt(Object aValue, int row, int column) { if (getRowCount() == 0 || row < 0 || column < 0) { return; } super.setValueAt(aValue, row, column); } private List<Render> valueRenders = new ArrayList<Render>(); public void addValueRender(int columnIndex, Map<Object, Object> values) { valueRenders.add(new Render(columnIndex, values)); } public class Render { private Render(int index, Map<Object, Object> renderValue) { this.index = index; this.renderValues = renderValue; } private int index; private Map<Object, Object> renderValues = new HashMap<Object, Object>(); private Object getValue(Object value) { if (renderValues == null) { return value; } return renderValues.get(value); } public String toString() { StringBuilder sb = new StringBuilder(); sb.append(index).append("\n"); Iterator it = renderValues.keySet().iterator(); Object key = null; while (it.hasNext()) { key = it.next(); sb.append("[").append(key).append("=").append(renderValues.get(key)).append("]"); } return sb.toString(); } } }
解决 1无用
悬赏问题
- ¥60 求一个简单的网页(标签-安全|关键词-上传)
- ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
- ¥15 基于卷积神经网络的声纹识别
- ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
- ¥100 为什么这个恒流源电路不能恒流?
- ¥15 有偿求跨组件数据流路径图
- ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
- ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
- ¥15 一直显示正在等待HID—ISP
- ¥15 Python turtle 画图