java大神们,用Jtable做一个想excel一样的表格
发布时间:2025-05-21 13:57:42 发布人:远客网络
一、java大神们,用Jtable做一个想excel一样的表格
你要模拟excel,要做的东西可就多了去了....
..功能那么多,什么时候才能实现的完啊.......
要是单纯的JTable还可以考虑下.....
最好把功能细化一下.....具体希望实现什么....
public class TableRowHeaderTest
public static void main(String[] args)
class TableRowHeaderFrame extends JFrame
public TableRowHeaderFrame(){
DefaultTableModel model= new DefaultTableModel(50,15);
JTable table= new JTable(model);
JScrollPane scrollPane= new JScrollPane(table,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
/*将rowHeaderTable作为row header加入JScrollPane的RowHeaderView区域*/
scrollPane.setRowHeaderView(new RowHeaderTable(table,40));
// this.getContentPane().add(scrollPane,BorderLayout.CENTER);
this.setContentPane(scrollPane);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
*用于显示RowHeader的JTable,只需要将其加入JScrollPane的RowHeaderView即可为JTable生成行标题
class RowHeaderTable extends JTable
private JTable refTable;//需要添加rowHeader的JTable
*@param refTable需要添加rowHeader的JTable
*@param columnWideth rowHeader的宽度
public RowHeaderTable(JTable refTable,int columnWidth){
super(new RowHeaderTableModel(refTable.getRowCount()));
//table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
this.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);//不可以调整列宽
this.getColumnModel().getColumn(0).setPreferredWidth(columnWidth);
this.setDefaultRenderer(Object.class,new RowHeaderRenderer(refTable,this));//设置渲染器
this.setPreferredScrollableViewportSize(new Dimension(columnWidth,0));
*用于显示RowHeader的JTable的渲染器,可以实现动态增加,删除行,在Table中增加、删除行时RowHeader
*一起变化。当选择某行时,该行颜色会发生变化
class RowHeaderRenderer extends JLabel implements TableCellRenderer,ListSelectionListener
JTable reftable;//需要添加rowHeader的JTable
JTable tableShow;//用于显示rowHeader的JTable
public RowHeaderRenderer(JTable reftable,JTable tableShow)
//增加监听器,实现当在reftable中选择行时,RowHeader会发生颜色变化
ListSelectionModel listModel=reftable.getSelectionModel();
listModel.addListSelectionListener(this);
public Component getTableCellRendererComponent(JTable table,Object obj,
boolean isSelected,boolean hasFocus,int row, int col)
((RowHeaderTableModel)table.getModel()).setRowCount(reftable.getRowCount());
JTableHeader header= reftable.getTableHeader();
setBorder(UIManager.getBorder("TableHeader.cellBorder"));//设置为TableHeader的边框类型
setHorizontalAlignment(CENTER);//让text居中显示
setBackground(header.getBackground());//设置背景色为TableHeader的背景色
if( isSelect(row))//当选取单元格时,在row header上设置成选取颜色
setBackground(Color.lightGray);
setForeground(header.getForeground());
setText(String.valueOf(row+1));
public void valueChanged(ListSelectionEvent e){
private boolean isSelect(int row)
int[] sel= reftable.getSelectedRows();
for( int i=0; i<sel.length; i++)
*用于显示表头RowHeader的JTable的TableModel,不实际存储数据
class RowHeaderTableModel extends AbstractTableModel
private int rowCount;//当前JTable的行数,与需要加RowHeader的TableModel同步
public RowHeaderTableModel(int rowCount){
public void setRowCount(int rowCount){
public Object getValueAt(int row, int column){
//本文来自CSDN博客,转载请标明出处:
二、java 怎样获得jtable中的选中行中的数据
首先假设两个JTable,他们为table1与table2
1、获得table1的选中行 int index= table1.getSelectedRow();
2、获得table1中列的个数 int column= table1.getColumnCount();
3、取出表格中index行中的值,用集合保存!
(1)创建一个保存的集合Vector<Vector<Object>> vector= Vector<Vector<Object>>();
(2)再创建一个集合,用于加入到第一个集合 Vector<Object> object= Vector<Object>();
(3)将index行的所有数据取出放入第二个集合中
for(int n= 0; n< column; n++){
object.add(table1.getVauleAt(index,n));
(4)将第二集合中的数据加入到第一个集合中: vector.add(object);
4、创建table2的列名,并用一个集合表示,!
(1)创建一个集合,用于创建列名Vector<Object> object1= new Vector<Object>();
(2)为列名赋值,,,,在这里就省略了,具体的名视情况而定!
(1)取得table2的模板DefaultTableModel model=(DefaultTableModel)table2.getModel();
(2)为模板添加内容:model.setDataVector(vector, object1);
(3)将模板添加到table2中, table2.setModel(model);
三、Java JTable 如何让表格单击单元格后就进入编辑状态
1、这个简单:如果按楼上的人的方法,会害死你不可,2楼的绝对不行,我刚开始也这样,现在想想,真的要看JAVA的原代码了
2、jTable1= new javax.swing.JTable(){
3、 public void changeSelection(int rowIndex, int columnIndex,
4、 boolean toggle, boolean extend){
5、 super.changeSelection(rowIndex, columnIndex, toggle, extend);
6、 super.editCellAt(rowIndex, columnIndex, null);
7、这样后jTable1对象只要单击就进入编辑状态;
8、因为JTable每次都会自动的调用changeSelection方法,不需要你判断是否有焦点
9、你肯定还会遇到,JTable没把焦点取消,单元格的数据无法保存,
10、 jTable.getCellEditor().stopCellEditing();
11、不是可以输中文了吗?具体有没有光标很重要吗?
12、我的QQ:7706189,加我说明是那个问题