javaJtable经典列设置+表格颜色.docx
《javaJtable经典列设置+表格颜色.docx》由会员分享,可在线阅读,更多相关《javaJtable经典列设置+表格颜色.docx(10页珍藏版)》请在冰豆网上搜索。
![javaJtable经典列设置+表格颜色.docx](https://file1.bdocx.com/fileroot1/2022-11/28/4963816b-7dd5-42b7-a739-74111376ca0b/4963816b-7dd5-42b7-a739-74111376ca0b1.gif)
javaJtable经典列设置+表格颜色
作者:
泪089
大家大多数看到的设置Jtable的行颜色是,仅仅值是一个列子,完全没有在实际的Gui用应用,好多的列子特简单。
而本人做的则是在实际的应用中完成的,
说明:
在邮件程序中判断某列的数据来设置某行的颜色,
一下程序中,我们可以根据发送的完成百分比来索引到改列数值所在的行,具体我们看下面
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Dimension;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Vector;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjavax.swing.JScrollPane;
importjavax.swing.JTable;
importjavax.swing.SwingConstants;
importjavax.swing.table.DefaultTableCellRenderer;
importjavax.swing.table.DefaultTableModel;
importcom.s361.server.mail.util.RowColorRenderer_Running;
1,创建第一个类GUI用于显示
publicclassGUIextendsJFrame{
privatestaticJFrameframe=null;
privatestaticJPanelpanel=null;
staticJTabletable=null;
staticDefaultTableModeltabledtm=newDefaultTableModel();
/*
*intcomplete=0;staticintrow=0;
*/
staticJScrollPanescrollPane=null;
//定义table中的内容不可编辑,DefaultTableModel是Jtable的一个方法
publicbooleanisCellEditable(){
returnfalse;
}
//GUi的方法
publicGUI(){
frame=newJFrame();
frame.setBounds(200,200,500,500);
panel=newJPanel();
panel.setBackground(Color.white);
String[]temp=newString[5];
Vectortitle=newVector();
title.add("文件名");
title.add("发件人");
title.add("收件人");
title.add("收件时间");
title.add("完成百分比");
title.add("每秒接收");
//在表格中添加标题
tabledtm=newDefaultTableModel(null,title);
//用来设定dtm中表格数据不可修改(查看isCellEditable)
table=newJTable(tabledtm){
publicbooleanisCellEditable(introw,intcolumn){
returnfalse;
}
};
table.setModel(tabledtm);
JScrollPanescrollPane=newJScrollPane(table);//在滚动框中加入table
scrollPane.setPreferredSize(newDimension(400,300));//大小设置
DefaultTableCellRenderersend=newDefaultTableCellRenderer();
send.setHorizontalAlignment(SwingConstants.CENTER);
//设置每行的高度为25
table.setRowHeight(25);
//设置相邻两行单元格的距离
table.setRowMargin(0);
//可选择行
table.setRowSelectionAllowed(true);
//选择行背景色
table.setSelectionBackground(newColor(189,252,201));//薄荷绿
///选择行前景色
table.setGridColor(newColor(200,200,200));
//是否显示这个网格
table.setShowGrid(true);
//是否显示水平网格
table.setShowHorizontalLines(true);
//是否显示垂直网格
table.setShowVerticalLines(true);
//表格背景色
table.setBackground(Color.yellow);
DefaultTableCellRenderertcr=newDefaultTableCellRenderer();
tcr.setHorizontalAlignment(SwingConstants.CENTER);
table.getColumn("文件名").setCellRenderer(tcr);
table.getColumn("发件人").setCellRenderer(tcr);
table.getColumn("收件人").setCellRenderer(tcr);
table.getColumn("收件时间").setCellRenderer(tcr);
table.getColumn("完成百分比").setCellRenderer(tcr);
table.getColumn("每秒接收").setCellRenderer(tcr);
panel.add(scrollPane,BorderLayout.CENTER);
frame.add(panel);
frame.setVisible(true);
frame.setResizable(true);
}
//*********写个数据传入表格的方法这个比较重要,以为涉及到数据在表格中的显示*******************************
publicstaticvoidshowTableInfo(Listtable_info){
//正在运行行索引列表,
ListrunningRowIndexes=newArrayList();
for(inti=0;i//保存正在运行的行索引,到runningRowIndexes,加个判断:
判断i,完成百分比不等于0,索引到这行,添加到
//runningRowIndexes中
if(!
table_info.get(i).getFinishPercent().equals("0")){
runningRowIndexes.add(i);
}
}
//在测试类中设置list的值,将值穿进去
for(inti=0;iString[]sendDate={
table_info.get(i).getFileName(),//文件名
table_info.get(i).getSender(),//发件人
table_info.get(i).getReceiver(),//收件人
table_info.get(i).getFileSize(),
table_info.get(i).getFinishPercent(),//完成百分比
table_info.get(i).getSendSpeed()};//速度
//完成插入在表格后
tabledtm.insertRow(tabledtm.getRowCount(),sendDate);
//表格插入数据,将date的数据传入row中
tabledtm.getRowCount();
}
//渲染正在运行的行颜色
//重要的是以下的代码。
。
。
。
for(inti=0;i
table
.getColumnModel()
.getColumn(i)
.setCellRenderer(newRowColorRenderer_Running(//创建一个RowColorRenderer_Running的类
runningRowIndexes,tabledtm
));
}
}
}
第二个类,就是getset的方法,将传值的类型等写好
publicclassTableInfo{
privateStringsender;//发件人
privateStringreceiver;//收件人
privateStringsendTime;//发送时间
privateStringfileSize;//文件大小,int范围0-21亿如果大文件的话就可能不行,所以采用long
privateStringfinishPercent;//完成百分比
privateStringsendSpeed;//发送速度
privateStringfileName;
publicStringgetSender(){
returnsender;
}
publicvoidsetSender(Stringsender){
this.sender=sender;
}
publicStringgetReceiver(){
returnreceiver;
}
publicvoidsetReceiver(Stringreceiver){
this.receiver=receiver;
}
publicStringgetSendTime(){
returnsendTime;
}
publicvoidsetSendTime(StringsendTime){
this.sendTime=sendTime;
}
publicStringgetFileSize(){
returnfileSize;
}
publicvoidsetFileSize(StringfileSize){
this.fileSize=fileSize;
}
publicStringgetFinishPercent(){
returnfinishPercent;
}
publicvoidsetFinishPercent(StringfinishPercent){
this.finishPercent=finishPercent;
}
publicStringgetSendSpeed(){
returnsendSpeed;
}
publicvoidsetSendSpeed(StringsendSpeed){
this.sendSpeed=sendSpeed;
}
publicStringgetFileName(){
returnfileName;
}
publicvoidsetFileName(StringfileName){
this.fileName=fileName;
}
publicTableInfo(Stringsender,Stringreceiver,StringsendTime,
StringfileSize,StringfinishPercent,StringsendSpeed,
StringfileName){
super();
this.sender=sender;
this.receiver=receiver;
this.sendTime=sendTime;
this.fileSize=fileSize;
this.finishPercent=finishPercent;
this.sendSpeed=sendSpeed;
this.fileName=fileName;
}
}
第三个类:
RowColorRenderer_Running
importjava.awt.Color;
importjava.awt.Component;
importjava.util.List;
importjavax.swing.JTable;
importjavax.swing.table.DefaultTableCellRenderer;
importjavax.swing.table.DefaultTableModel;
//类继承DefaultTableCellRenderer渲染器的方法哦
publicclassRowColorRenderer_RunningextendsDefaultTableCellRenderer{
privateListrunningRowIndexes;
privateDefaultTableModeldtm;
//一个有参的构造函数
publicRowColorRenderer_Running(ListrunningRowIndexes,DefaultTableModeldtm){
this.runningRowIndexes=runningRowIndexes;
this.dtm=dtm;
}
//下面就是索引到你想要设置某行的颜色了(注意JTable**这是你的table名,我只是命名了tabel方便识别)
publicComponentgetTableCellRendererComponent(JTabletable,Objectvalue,booleanisSelected,booleanhasFocus,
introw,intcolumn){
if(runningRowIndexes.indexOf(row)>-1){
setBackground(Color.RED);
}else{
setBackground(newColor(115,240,2445));
}
return
//super.super.getTableCellRendererComponent(这里的table要看你自己的table名,)
super.getTableCellRendererComponent(table,dtm.getValueAt(row,column),
isSelected,hasFocus,row,column);
}
}
第4个类就是测试类,在这里要把数值传进去
importjava.util.ArrayList;
importjava.util.List;
publicclassTestFrame{
publicstaticvoidmain(String[]args){
newGUI();
Listtable_info=newArrayList();
//文件名,发件人,收件人,时间,百分比,每秒接受
TableInfot1=newTableInfo("1","2","3","12","0","0","1");
TableInfot2=newTableInfo("1","2","3","12","13","0","2");
TableInfot3=newTableInfo("1","2","3","12","13","0","2");
TableInfot4=newTableInfo("1","2","3","12","0","0","2");
TableInfot5=newTableInfo("1","2","3","12","0","12","212");
TableInfot6=newTableInfo("1","2","3","12","0","0","212");
TableInfot7=newTableInfo("1","2","3","12","3","0","212");
TableInfot8=newTableInfo("1","2","3","12","0","0","0");
TableInfot9=newTableInfo("1","2","3","12","0","0","212");
TableInfot10=newTableInfo("1","2","3","12","0","0","212");
TableInfot11=newTableInfo("1","2","3","12","0","0","212");
table_info.add(t1);
table_info.add(t2);
table_info.add(t3);
table_info.add(t4);
table_info.add(t5);
table_info.add(t6);
table_info.add(t7);
table_info.add(t8);
table_info.add(t9);
table_info.add(t10);
table_info.add(t11);
GUI.showTableInfo(table_info);//GUi调用Show的方法来、//显示
}
}效果窗
口: