JTable中合并单元格_第1页
JTable中合并单元格_第2页
JTable中合并单元格_第3页
JTable中合并单元格_第4页
JTable中合并单元格_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/* * SimpleTableDemo.java is a 1.4 application that requires no other files. */ /编辑的时候直接从覆盖原有内容 import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.MouseAdapter;

2、import java.awt.event.MouseEvent; import java.util.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; import java.io.*; import java.util.*; public class Combine extends JPanel private boolean DEBUG = false; JTable table; public Combine() super(new GridLayout(1,0); table =

3、new JTable( new MyTableModel() ); table.setPreferredScrollableViewportSize(new Dimension(500, 70); / table.setDefaultEditor( String.class, new SelEditor() ); /Create the scroll pane and add the table to it. JScrollPane scrollPane = new JScrollPane(table); /Add the scroll pane to this panel. add(scro

4、llPane); /* * Create the GUI and show it. For thread safety, * this method should be invoked from the * event-dispatching thread. */ private static void createAndShowGUI() /Make sure we have nice window decorations. JFrame.setDefaultLookAndFeelDecorated(true); /Create and set up the window. JFrame f

5、rame = new JFrame("MyCustomTable2"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /Create and set up the content pane. Combine newContentPane = new Combine(); newContentPane.setOpaque(true); /content panes must be opaque frame.setContentPane(newContentPane); /Display the window. f

6、rame.pack(); frame.setVisible(true); try Thread.sleep( 1000 ); catch ( InterruptedException e ) e.printStackTrace(); (MyTableModel)newContentPane.table.getModel().combineRow( "First Name", "Last Name" ); public static void main(String args) /Schedule a job for the event-dispatchi

7、ng thread: /creating and showing this application´s GUI. javax.swing.SwingUtilities.invokeLater(new Runnable() public void run() createAndShowGUI(); ); class MyTableModel extends AbstractTableModel private String columnNames = "First Name", "Last Name", "Sport", &q

8、uot;# of Years", "Vegetarian" private List cList = new ArrayList(); for( int i = 0; i < columnNames.length; i + ) cList.add( columnNames i ); private Object data = "Mary", "Campione", "Snowboarding", new Integer(5), new Boolean(false), "Alison&quo

9、t;, "Huml", "Rowing", new Integer(3), new Boolean(true), "Kathy", "Walrath", "Knitting", new Integer(2), new Boolean(false), "Sharon", "Zakhour", "Speed reading", new Integer(20), new Boolean(true), "Philip", &

10、quot;Milne", "Pool", new Integer(10), new Boolean(false) ; private List dList = new ArrayList(); for( int i = 0; i < data.length; i + ) List tmp = new ArrayList(); for( int j = 0; j < data i .length; j + ) tmp.add( data i j ); dList.add( tmp ); public int getColumnCount() return

11、 cList.size(); public int getRowCount() return dList.size(); public String getColumnName(int col) return (String)cList.get( col ); public Object getValueAt(int row, int col) return (List)dList.get( row ).get( col ); public void combineRow( String r1, String r2 ) int index1 = cList.indexOf( r1 ); int

12、 index2 = cList.indexOf( r2 ); cList.set( index1, r1+r2 ); cList.remove( r2 ); for( int i = 0; i < dList.size(); i + ) List list = (List)dList.get( i ); list.set( index1, list.get( index1 ).toString() + list.get( index2 ) ); list.remove( index2 ); fireTableStructureChanged(); /* * JTable uses thi

13、s method to determine the default renderer/ * editor for each cell. If we didn´t implement this method, * then the last column would contain text ("true"/"false"), * rather than a check box. */ public Class getColumnClass(int c) return cList.get( c ).getClass(); public boole

14、an isCellEditable(int row, int col) /Note that the data/cell address is constant, /no matter where the cell appears onscreen. return true; public void setValueAt(Object value, int row, int col) (List)dList.get( row ).set( col , value ); fireTableCellUpdated(row, col); private void printDebugData() i

15、nt numRows = getRowCount(); int numCols = getColumnCount(); for (int i=0; i < numRows; i+) System.out.print(" row " + i + ":"); for (int j=0; j < numCols; j+) System.out.print(" " + (List)dList.get( i ).get( j ); System.out.println(); System.out.println("-&qu

16、ot;); 请仔细看MyTableModel的实现第二个:/* (swing1.1beta3) */package tame.examples;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.*;import javax.swing.*;import javax.swing.table.*;import tame.table.ColumnGroup;import tame.table.GroupableTableHeader;import tame.table.Group

17、ableTableHeaderUI;/*<pre>* |-|* |        |       Name      |         Language         |* |     

18、0;  |-|-|* |  SNo.  |        |        |        |      Others     |* |        |   1 &#

19、160;  |    2   | Native |-|* |        |        |        |        |   2    |   3  

20、0; |* |-|* |        |        |        |        |        |        |</pre>author Nobuo

21、 Tamemasaversion 1.0 11/09/98*/public class GroupableHeaderExample extends JFrame     GroupableHeaderExample()       super( "Groupable Header Example" );      DefaultTableModel dm = new DefaultTableModel();   &

22、#160;  dm.setDataVector(new Object        "119","foo","bar","ja","ko","zh",        "911","bar","foo","en","fr",&quo

23、t;pt",      new Object"SNo.","1","2","Native","2","3");      JTable table = new JTable( dm ) protected JTableHeader createDefaultTableHeader()        

24、     return new GroupableTableHeader(columnModel);              ;      TableColumnModel cm = table.getColumnModel();  /得到列模型,可以取出表头      ColumnGroup g_name = new Col

25、umnGroup("Name");      g_name.add(cm.getColumn(1);      g_name.add(cm.getColumn(2);      ColumnGroup g_lang = new ColumnGroup("Language");      g_lang.add(cm.getColumn(3); 

26、60;    ColumnGroup g_other = new ColumnGroup("Others");      g_other.add(cm.getColumn(4);      g_other.add(cm.getColumn(5);      g_lang.add(g_other);      GroupableTableHeader

27、 header = (GroupableTableHeader)table.getTableHeader();      header.addColumnGroup(g_name);      header.addColumnGroup(g_lang);      TableCellRenderer renderer =  new DefaultTableCellRenderer()     &#

28、160;     public Component getTableCellRendererComponent(JTable table, Object value,                           boolean isSelected, boolean hasFocus, in

29、t row, int column)             JTableHeader header = table.getTableHeader();            if (header != null)               set

30、Foreground(header.getForeground();              setBackground(header.getBackground();              setFont(header.getFont();       

31、0;                setHorizontalAlignment(JLabel.CENTER);            setText(value = null) ? "" : value.toString();        

32、60;   setBorder(UIManager.getBorder("TableHeader.cellBorder");            return this;                  ;      TableColu

33、mnModel model = table.getColumnModel();      for (int i=0;i<model.getColumnCount();i+)         model.getColumn(i).setHeaderRenderer(renderer);              table.getTableHeader(

34、).setUI(new GroupableTableHeaderUI();      JScrollPane scroll = new JScrollPane( table );      getContentPane().add( scroll );      setSize( 400, 120 );        public static void main(String args

35、)       GroupableHeaderExample frame = new GroupableHeaderExample();      frame.addWindowListener( new WindowAdapter()         public void windowClosing( WindowEvent e )     System.exit(0);  

36、;            );      frame.setVisible(true);    _public class GroupableHeaderExample extends JFrame   GroupableHeaderExample()     super( "Groupable Header Example" );  &

37、#160; DefaultTableModel dm = new DefaultTableModel();    dm.setDataVector(new Object      "119","foo","bar","ja","ko","zh",      "911","bar","foo"

38、;,"en","fr","pt",    new Object"SNo.","1","2","Native","2","3");    JTable table = new JTable( dm )       protected JTableHeader createDefaultTableHeader()

39、   return new GroupableTableHeader(columnModel);          ;    TableColumnModel cm = table.getColumnModel();    ColumnGroup g_name = new ColumnGroup("Name");    g_name.add(cm.getColumn(1);  

40、  g_name.add(cm.getColumn(2);    ColumnGroup g_lang = new ColumnGroup("Language");    g_lang.add(cm.getColumn(3);    ColumnGroup g_other = new ColumnGroup("Others");    g_other.add(cm.getColumn(4);   

41、 g_other.add(cm.getColumn(5);    g_lang.add(g_other);    GroupableTableHeader header = (GroupableTableHeader)table.getTableHeader();    header.addColumnGroup(g_name);    header.addColumnGroup(g_lang);    TableCellRenderer ren

42、derer =  new DefaultTableCellRenderer()         public Component getTableCellRendererComponent(JTable table, Object value,                       

43、  boolean isSelected, boolean hasFocus, int row, int column)           JTableù”vRNýYùPÿÙ/fHNNÞVN ÿSàV:N(WHQMRvheader-NòÏQÇmarginvîNÿTbÍY/ RNdkmargin0OïSåNôf9eGr

44、oupableTableHeaderUIvpaint¹eÕlÿ Rd();                    setHorizontalAlignment(JLabel.CENTER);          setText(value = null) ? "" : value.

45、toString();          setBorder(UIManager.getBorder("TableHeader.cellBorder");          return this;              ;    TableCo

46、lumnModel model = table.getColumnModel();    for (int i=0;i<model.getColumnCount();i+)       model.getColumn(i).setHeaderRenderer(renderer);        JScrollPane scroll = new JScrollPane( table );    getContentPane

47、().add( scroll );    setSize( 400, 120 );    public static void main(String args)     GroupableHeaderExample frame = new GroupableHeaderExample();    frame.addWindowListener( new WindowAdapter()       public void windowC

48、losing( WindowEvent e )   System.exit(0);          );    frame.setVisible(true);  我发现表头和所对应的列不能够对齐,这是怎么一回事 ?原因为在先前的header中已经考虑过margin的问题了,而后面重复累加了此margin。你可以更改GroupableTableHeaderUI的paint方法,删除对margin的累加。本来我已经看到这种不能对齐的情况,没想到你真的来问。不过我还是鼓

49、励你自己解决,实在不行的话,在来此问。具体代码如下: public void paint(Graphics g, JComponent c) Rectangle clipBounds = g.getClipBounds(); if (header.getColumnModel() = null) return;/ (GroupableTableHeader)header).setColumnMargin(); int column = 0; Dimension size = header.getSize(); Rectangle cellRect = new Rectangle(0, 0, size.width, s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论