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

这篇博客介绍如何使用Java的JTable组件来创建一个类似于Excel的表格。通过自定义的RowHeaderTable和RowHeaderRenderer类,实现了行标题显示、行选择颜色变化等功能,但并未涵盖Excel的所有复杂功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

展开全部

你要模拟excel,要做的东西可就多了去了....

..功能那么多,什么时候才能实现的完啊.......

要是单纯的JTable还可以考虑62616964757a686964616fe58685e5aeb931333262353935下.....

最好把功能细化一下.....具体希望实现什么....

import javax.swing.*;

import java.awt.*;

import javax.swing.table.*;

import javax.swing.event.*;

import java.awt.event.*;

public class TableRowHeaderTest

{

public static void main(String[] args)

{

new TableRowHeaderFrame();

}

}

class TableRowHeaderFrame extends JFrame

{

public TableRowHeaderFrame(){

DefaultTableModel model = new DefaultTableModel(50,15);

JTable table = new JTable(model);

/*将table加入JScrollPane*/

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.setVisible(true);

this.setSize(400,300);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

/**

* 用于显示RowHeader的JTable,只需要将其加入JScrollPane的RowHeaderView即可为JTable生成行标题

*/

class RowHeaderTable extends JTable

{

private JTable refTable;//需要添加rowHeader的JTable

/**

* 为JTable添加RowHeader,

* @param refTable 需要添加rowHeader的JTable

* @param columnWideth rowHeader的宽度

*/

public RowHeaderTable(JTable refTable,int columnWidth){

super(new RowHeaderTableModel(refTable.getRowCount()));

this.refTable=refTable;

//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)

{

this.reftable = reftable;

this.tableShow=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();

this.setOpaque(true);

setBorder(UIManager.getBorder("TableHeader.cellBorder"));//设置为TableHeader的边框类型

setHorizontalAlignment(CENTER);//让text居中显示

setBackground(header.getBackground());//设置背景色为TableHeader的背景色

if ( isSelect(row) ) //当选取单元格时,在row header上设置成选取颜色

{

setForeground(Color.white);

setBackground(Color.lightGray);

}

else

{

setForeground(header.getForeground());

}

setFont(header.getFont());

setText(String.valueOf(row+1));

return this;

}

public void valueChanged(ListSelectionEvent e){

this.tableShow.repaint();

}

private boolean isSelect(int row)

{

int[] sel = reftable.getSelectedRows();

for ( int i=0; i

if (sel[i] == row )

return true;

return false;

}

}

/**

* 用于显示表头RowHeader的JTable的TableModel,不实际存储数据

*/

class RowHeaderTableModel extends AbstractTableModel

{

private int rowCount;//当前JTable的行数,与需要加RowHeader的TableModel同步

public RowHeaderTableModel(int rowCount){

this.rowCount=rowCount;

}

public void setRowCount(int rowCount){

this.rowCount=rowCount;

}

public int getRowCount(){

return rowCount;

}

public int getColumnCount(){

return 1;

}

public Object getValueAt(int row, int column){

return row;

}

}

//本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/chosen0ne/archive/2009/08/17/4456685.aspx

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值