jtable背景列宽.docx

上传人:b****5 文档编号:6060358 上传时间:2023-01-03 格式:DOCX 页数:7 大小:38.79KB
下载 相关 举报
jtable背景列宽.docx_第1页
第1页 / 共7页
jtable背景列宽.docx_第2页
第2页 / 共7页
jtable背景列宽.docx_第3页
第3页 / 共7页
jtable背景列宽.docx_第4页
第4页 / 共7页
jtable背景列宽.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

jtable背景列宽.docx

《jtable背景列宽.docx》由会员分享,可在线阅读,更多相关《jtable背景列宽.docx(7页珍藏版)》请在冰豆网上搜索。

jtable背景列宽.docx

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

       RowSortersorter=newTableRowSorter(this.getModel());

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

      

      RowSortersorter=newTableRowSorter(this.getModel());

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

   }

}

效果图如下(根据代码微调会使效果图不同):

分类:

示例代码

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1