Jtable 凍結

 網上看到的凍結Table列的代碼,是通過兩個Table來實現。現有一個第三方控件包jsuit,有jpvTableView控件,可以實現凍結的功能,但是沒有凍結表頭。

 

  1. import java.awt.BorderLayout;
  2. import java.awt.event.WindowAdapter;
  3. import java.awt.event.WindowEvent;
  4. import javax.swing.*;
  5. import javax.swing.event.ListSelectionEvent;
  6. import javax.swing.event.ListSelectionListener;
  7. import javax.swing.table.AbstractTableModel;
  8. public class JtableTest extends JFrame {
  9.     private static final long serialVersionUID = 1L;
  10.     Object[][] data;
  11.     Object[] column;
  12.     JTable fixedTable, table;
  13.     public JtableTest() {
  14.         super("Fixed Column Example");
  15.         setSize(400, 150);
  16.         data = new Object[][] { { "1""11""A""""""""""" },
  17.                 { "2""22""""B""""""""" },
  18.                 { "3""33""""""C""""""" },
  19.                 { "4""44""""""""D""""" },
  20.                 { "5""55""""""""""E""" },
  21.                 { "6""66""""""""""""F" } };
  22.         column = new Object[] { "fixed 1""o""a""b""c""d""e""f" };
  23.         AbstractTableModel fixedModel = new AbstractTableModel() {
  24.             private static final long serialVersionUID = 1L;
  25.             public int getColumnCount() {
  26.                 return 1;
  27.             }
  28.             public int getRowCount() {
  29.                 return data.length;
  30.             }
  31.             public String getColumnName(int col) {
  32.                 return (String) column[col];
  33.             }
  34.             public Object getValueAt(int row, int col) {
  35.                 return data[row][col];
  36.             }
  37.         };
  38.         AbstractTableModel model = new AbstractTableModel() {
  39.             private static final long serialVersionUID = 1L;
  40.             public int getColumnCount() {
  41.                 return column.length - 2;
  42.             }
  43.             public int getRowCount() {
  44.                 return data.length;
  45.             }
  46.             public String getColumnName(int col) {
  47.                 return (String) column[col + 1];
  48.             }
  49.             public Object getValueAt(int row, int col) {
  50.                 return data[row][col + 1];
  51.             }
  52.             public void setValueAt(Object obj, int row, int col) {
  53.                 data[row][col + 1] = obj;
  54.             }
  55.             public boolean CellEditable(int row, int col) {
  56.                 return true;
  57.             }
  58.         };
  59.         fixedTable = new JTable(fixedModel);
  60.         fixedTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  61.         fixedTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  62.         fixedTable.getSelectionModel().addListSelectionListener(
  63.                 new ListSelectionListener() {
  64.                     public void valueChanged(ListSelectionEvent arg0) {
  65.                         checkSelection(true);
  66.                     }
  67.                 });
  68.         table = new JTable(model);
  69.         table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  70.         table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  71.         table.getSelectionModel().addListSelectionListener(
  72.                 new ListSelectionListener() {
  73.                     public void valueChanged(ListSelectionEvent arg0) {
  74.                         checkSelection(false);
  75.                     }
  76.                 });
  77.         JViewport viewport = new JViewport();
  78.         viewport.setView(fixedTable);
  79.         viewport.setPreferredSize(fixedTable.getPreferredSize());
  80.         JScrollPane scroll = new JScrollPane(table);
  81.         scroll.setRowHeaderView(viewport);
  82.         scroll.setCorner(JScrollPane.UPPER_LEFT_CORNER, fixedTable
  83.                 .getTableHeader());
  84.         getContentPane().add(scroll, BorderLayout.CENTER);
  85.     }
  86.     private void checkSelection(boolean isFixedTable) {
  87.         int fixedSelectedIndex = fixedTable.getSelectedRow();
  88.         int selectedIndex = table.getSelectedRow();
  89.         if (fixedSelectedIndex != selectedIndex) {
  90.             if (isFixedTable) {
  91.                 table.setRowSelectionInterval(fixedSelectedIndex,
  92.                         fixedSelectedIndex);
  93.             } else {
  94.                 fixedTable
  95.                         .setRowSelectionInterval(selectedIndex, selectedIndex);
  96.             }
  97.         }
  98.     }
  99.     public static void main(String[] args) {
  100.         JtableTest frame = new JtableTest();
  101.         frame.addWindowListener(new WindowAdapter() {
  102.             public void windowClosing(WindowEvent e) {
  103.                 System.exit(0);
  104.             }
  105.         });
  106.         frame.setVisible(true);
  107.     }
  108. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值