您当前的位置:首页 > 互联网教程

java大神们,用Jtable做一个想excel一样的表格

发布时间:2025-05-21 13:57:42    发布人:远客网络

java大神们,用Jtable做一个想excel一样的表格

一、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,加我说明是那个问题