jtable背景列宽.docx
- 文档编号:6060358
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:7
- 大小:38.79KB
jtable背景列宽.docx
《jtable背景列宽.docx》由会员分享,可在线阅读,更多相关《jtable背景列宽.docx(7页珍藏版)》请在冰豆网上搜索。
jtable背景列宽
JTable中实现行背景颜色、固定表格列宽、根据内容自动调整列宽、列中数据排序等功能示例代码
信息资料来源:
根据以下两链接内容进行整理。
在此对两文章作者表示感谢!
(1)StyleTable.java文件用于实现各种上面提到的功能。
importjava.awt.Color;
importjava.awt.Component;
importjava.awt.Dimension;
importjava.util.Enumeration;
importjavax.swing.JTable;
importjavax.swing.RowSorter;
importjavax.swing.table.DefaultTableCellRenderer;
importjavax.swing.table.JTableHeader;
importjavax.swing.table.TableColumn;
importjavax.swing.table.TableColumnModel;
importjavax.swing.table.TableModel;
importjavax.swing.table.TableRowSorter;
/**
*本类实现了对JTable颜色的控制,提供了两套方案:
*1.实现了表格行两种颜色交替的效果
*2.实现了用一个控制颜色的字符串数组来设置所对应行的颜色
*本文件与PlanetTable.java文件相配合使用
*@authorSidney
*@version1.0(2008-1-14)
*/
publicclassStyleTableextendsJTable
{
privateString[]color=null;//用于设定行颜色的数组
publicStyleTable()
{
super();
}
publicStyleTable(Object[][]rowData,Object[]columnNames)
{
super(rowData,columnNames);
paintRow();//将奇偶行分别设置为不同颜色
//setFixColumnWidth(this);//固定表格的列宽
//通过点击表头来排序列中数据resortdatabyclickingtableheader
RowSorter
this.setRowSorter(sorter);
this.setIntercellSpacing(newDimension(5,5));//设置数据与单元格边框的眉边距
//根据单元内的数据内容自动调整列宽resizecolumnwidthaccordngtocontentofcellautomatically
fitTableColumns(this);
}
publicStyleTable(Object[][]rowData,Object[]columnNames,String[]color)
{
super(rowData,columnNames);
this.color=color;
paintColorRow();
setFixColumnWidth(this);
RowSorter
this.setRowSorter(sorter);
this.setIntercellSpacing(newDimension(5,5));
fitTableColumns(this);
}
/**
*根据color数组中相应字符串所表示的颜色来设置某行的颜色,注意,JTable中可以对列进行整体操作
*而无法对行进行整体操作,故设置行颜色实际上是逐列地设置该行所有单元格的颜色。
*/
publicvoidpaintRow()
{
TableColumnModeltcm=this.getColumnModel();
for(inti=0,n=tcm.getColumnCount();i { TableColumntc=tcm.getColumn(i); tc.setCellRenderer(newRowRenderer()); } } publicvoidpaintColorRow() { TableColumnModeltcm=this.getColumnModel(); for(inti=0,n=tcm.getColumnCount();i { TableColumntc=tcm.getColumn(i); tc.setCellRenderer(newRowColorRenderer()); } } /** *将列设置为固定宽度。 //fixtablecolumnwidth * */ publicvoidsetFixColumnWidth(JTabletable) { //this.setRowHeight(30); this.setAutoResizeMode(table.AUTO_RESIZE_OFF); /**/ //Thefollowingcodecanbeusedtofixtablecolumnwidth TableColumnModeltcm=table.getTableHeader().getColumnModel(); for(inti=0;i { TableColumntc=tcm.getColumn(i); tc.setPreferredWidth(50); //tc.setMinWidth(100); tc.setMaxWidth(50); } } /** *根据数据内容自动调整列宽。 //resizecolumnwidthautomatically * */ publicvoidfitTableColumns(JTablemyTable) { myTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); JTableHeaderheader=myTable.getTableHeader(); introwCount=myTable.getRowCount(); Enumerationcolumns=myTable.getColumnModel().getColumns(); while(columns.hasMoreElements()) { TableColumncolumn=(TableColumn)columns.nextElement(); intcol=header.getColumnModel().getColumnIndex(column.getIdentifier()); intwidth=(int)header.getDefaultRenderer().getTableCellRendererComponent (myTable,column.getIdentifier(),false,false,-1,col).getPreferredSize().getWidth(); for(introw=0;row { intpreferedWidth=(int)myTable.getCellRenderer(row,col).getTableCellRendererComponent (myTable,myTable.getValueAt(row,col),false,false,row,col).getPreferredSize().getWidth(); width=Math.max(width,preferedWidth); } header.setResizingColumn(column);//此行很重要 column.setWidth(width+myTable.getIntercellSpacing().width); } } /** *定义内部类,用于控制单元格颜色,每两行颜色相间,本类中定义为蓝色和绿色。 * *@authorSidney * */ privateclassRowRendererextendsDefaultTableCellRenderer { publicComponentgetTableCellRendererComponent(JTablet,Objectvalue, booleanisSelected,booleanhasFocus,introw,intcolumn) { //设置奇偶行的背景色,可在此根据需要进行修改 if(row%2==0) setBackground(Color.BLUE); else setBackground(Color.GREEN); returnsuper.getTableCellRendererComponent(t,value,isSelected, hasFocus,row,column); } } /** *定义内部类,可根据一个指定字符串数组来设置对应行的背景色 * *@authorSidney * */ privateclassRowColorRendererextendsDefaultTableCellRenderer { publicComponentgetTableCellRendererComponent(JTablet,Objectvalue, booleanisSelected,booleanhasFocus,introw,intcolumn) { //分支判断条件可根据需要进行修改 if(color[row].trim().equals("E")) { setBackground(Color.RED); } elseif(color[row].trim().equals("H")) { setBackground(Color.CYAN); } elseif(color[row].trim().equals("A")) { setBackground(Color.BLUE); } elseif(color[row].trim().equals("F")) { setBackground(Color.ORANGE); } else { setBackground(Color.WHITE); } returnsuper.getTableCellRendererComponent(t,value,isSelected, hasFocus,row,column); } } } (2)PlanetTable.java文件用于利用上面的实现展示功能。 importjava.awt.BorderLayout; importjava.awt.Color; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjavax.swing.JButton; importjavax.swing.JFrame; importjavax.swing.JPanel; importjavax.swing.JScrollPane; importjavax.swing.JTable; /** *本类为JTable一个简单应用,实现了JTable的行颜色设置及表格的打印功能 *本文件与StyleTable.java文件相配合使用 */ publicclassPlanetTable { publicstaticvoidmain(String[]args) { JFrameframe=newPlanetTableFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } classPlanetTableFrameextendsJFrame { privateObject[][]cells={ {"Mercury",newDouble(2440.0),newInteger(0), newBoolean(false),Color.yellow}, {"Venus",newDouble(60520.0),newInteger(0),newBoolean(false), Color.yellow}, {"Earth",newDouble(6378.0),newInteger (1),newBoolean(false), Color.blue}, {"Mars",newDouble(3397.0),newInteger (2),newBoolean(false), Color.red}, {"Jupiter",newDouble(71492.0),newInteger(16), newBoolean(false),Color.orange}}; privateString[]columnNames={"Planet","Radius","Moons","Gaseous", "Color"}; privatestaticfinalintDEFAULT_WIDTH=400; privatestaticfinalintDEFAULT_HEIGHT=200; publicPlanetTableFrame() { //用于控制每一行颜色的数组 String[]color={"H","A","F","E","W"}; setTitle("PlanetTable"); setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT); //定义JTable,实例成自己扩展的JTable类,并传入用于设定颜色的数组 //finalJTabletable=newStyleTable(cells,columnNames,color); //下面这行代码可实现相邻两行颜色交替的效果,注意与上一行的区别 finalJTabletable=newStyleTable(cells,columnNames); add(newJScrollPane(table),BorderLayout.CENTER); JButtonprintButton=newJButton("Print"); printButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEventevent) { try{ table.print(); }catch(java.awt.print.PrinterExceptione){ e.printStackTrace(); } } }); JPanelbuttonPanel=newJPanel(); buttonPanel.add(printButton); add(buttonPanel,BorderLayout.SOUTH); } } 效果图如下(根据代码微调会使效果图不同): 分类: 示例代码
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- jtable 背景