java大神们,用Jtable做一个想excel一样的表格
就是那种很像excel的,头一行有个输入,然后整个表格最左面有1,2,3,4这样专门显示行数的,表格上面有A,B,C,D这样专门显示列数的.然后你选中那个单元格它就高亮显...
就是那种很像excel的,
头一行有个输入,然后整个表格最左面有1,2,3,4这样专门显示行数的,表格上面有A,B,C,D这样专门显示列数的.
然后你选中那个单元格它就高亮显示,从头一行的输入里输入东西回车就会显示在那个选中的单元格里
还有做几十行,右面和下面+两个滚动轴能实现么?
能给做下么,拜谢
就我上面说这些就行,主要就是用Jtable 模拟一个类似的界面,不需要那么多功能,基本的这几条就行
3L的大大能不能帮我再+点东西,这个跟我要的还差一点,就一点.别的大大们也来看看,加了我另开一贴给分 展开
头一行有个输入,然后整个表格最左面有1,2,3,4这样专门显示行数的,表格上面有A,B,C,D这样专门显示列数的.
然后你选中那个单元格它就高亮显示,从头一行的输入里输入东西回车就会显示在那个选中的单元格里
还有做几十行,右面和下面+两个滚动轴能实现么?
能给做下么,拜谢
就我上面说这些就行,主要就是用Jtable 模拟一个类似的界面,不需要那么多功能,基本的这几条就行
3L的大大能不能帮我再+点东西,这个跟我要的还差一点,就一点.别的大大们也来看看,加了我另开一贴给分 展开
4个回答
展开全部
你要模拟excel,要做的东西可就多了去了....
..功能那么多,什么时候才能实现的完啊.......
要是单纯的JTable还可以考虑下.....
最好把功能细化一下.....具体希望实现什么....
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<sel.length; 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;
}
}
//本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chosen0ne/archive/2009/08/17/4456685.aspx
..功能那么多,什么时候才能实现的完啊.......
要是单纯的JTable还可以考虑下.....
最好把功能细化一下.....具体希望实现什么....
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<sel.length; 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;
}
}
//本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chosen0ne/archive/2009/08/17/4456685.aspx
展开全部
可以做到的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以做,但没人会替你做,自己多学吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我发邮件给你,百度HI
那个
那个
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询