自訂jtable,實現排序,windows式多選習慣,斑馬線,ToolTip

來源:互聯網
上載者:User
package com.browser;import java.awt.Component;import java.awt.Dimension;import java.awt.Font;import java.awt.Point;import java.awt.dnd.DnDConstants;import java.awt.event.MouseEvent;import javax.swing.JTable;import javax.swing.ListSelectionModel;import javax.swing.RowSorter;import javax.swing.event.ListSelectionEvent;import javax.swing.event.MouseInputListener;import javax.swing.plaf.basic.BasicTableUI;import javax.swing.table.DefaultTableCellRenderer;import javax.swing.table.TableRowSorter;/** * 自訂jtable,實現排序,windows式多選習慣,斑馬線,ToolTip * @author dl */public class JMyTable extends JTable {public int m_nRow = -1; /**當前列號*/    public int[] m_nRows = null; /**當前選中的多個序號*/    public JMyTableModel model;    public RowSorter sorter;    public JMyTable(JMyTableModel model) {super(model);setUI(new MyTableUI());this.model = model;sorter = new TableRowSorter(model);setRowSorter(sorter);setColumnSelectionAllowed(false);    setRowSelectionAllowed(true);    setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);setDefaultRenderer(Object.class, new MyRender());}class MyRender extends DefaultTableCellRenderer{public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {super.getTableCellRendererComponent( table,  value,  isSelected,  hasFocus,  row,  column);//斑馬線if ((row % 2) != 0) {setBackground(new java.awt.Color(236,233,216));} else {setBackground(java.awt.Color.white);}//選中反藍if (isSelected) {setBackground(java.awt.Color.BLUE);}//字型設定Font font = new Font("宋體", Font.BOLD, 12);setFont(font);return this;}}/**實現windows式多選習慣*/class MyTableUI extends BasicTableUI {protected MouseInputListener createMouseInputListener() {return new MyMouseInputHandler();}class MyMouseInputHandler extends MouseInputHandler {private boolean ignoreDrag = false;public void mousePressed(MouseEvent e) {if (e.getClickCount() == 2) {table.clearSelection();}Point origin = e.getPoint();int row = table.rowAtPoint(origin);int column = table.columnAtPoint(origin);if (row != -1 && column != -1) {if (table.isCellSelected(row, column)) {ignoreDrag = true;} else {super.mousePressed(e);}}}public void mouseClicked(MouseEvent e) {super.mouseClicked(e);}public void mouseDragged(MouseEvent e) {if (!ignoreDrag) {super.mouseDragged(e);} else {table.getTransferHandler().exportAsDrag(table, e,DnDConstants.ACTION_COPY);}}public void mouseReleased(MouseEvent e) {if (ignoreDrag) {super.mousePressed(e);ignoreDrag = false;}super.mouseReleased(e);}}}/** * <br> * 方法說明:得到選中的行 <br> * 輸入參數: <br> * 傳回型別: */    public void valueChanged(ListSelectionEvent e) {    // System.out.println("valueChanged");    super.valueChanged(e);        m_nRows =  getSelectedRows();    if(m_nRows.length == 0) {    // 未選中    m_nRows = null;    m_nRow = -1;    return;    }    if (m_nRows.length == 1) {    // 選中一個    m_nRows = null;    m_nRow = getSelectedRow();    if (m_nRow != -1)    m_nRow = sorter.convertRowIndexToModel(m_nRow);    } else {    //選中多個    m_nRow = -1;    for (int i = 0; i < m_nRows.length; ++i) {    if (m_nRows[i] != -1)    m_nRows[i] = sorter.convertRowIndexToModel(m_nRows[i]);    }    }    repaint();    }        /**     *<br>方法說明:得到ToolTipText     *<br>輸入參數:     *<br>傳回型別:     */    public String getToolTipText() {    Point pt = getMousePosition();    if (pt == null)    return null;    int row = rowAtPoint(pt);       if (row == -1)return null;int index = sorter.convertRowIndexToModel(row);if (index == -1)return null;Dimension tableSize = getSize();int width = tableSize.width;if (width > 500)width = 500;if (width < 300)width = 300;String strText = "<html><table width="+ new Integer(width - 50)+ "pt border=/"0/" cellpadding=/"0/" cellspacing=/"0/" style=/"TABLE-LAYOUT: fixed/" >"+ "<font face=/"dialog/" size=3 color=black>"+ model.getValueAt(index).toString() + "</font></table></html>";return strText;}}
package com.browser;import java.util.Vector;import javax.swing.table.AbstractTableModel;/** * 自訂jtablemodel,配合自訂jtable使用 * @author dl */public class JMyTableModel extends AbstractTableModel {protected Vector all = new Vector();  /**所有資料的列表*//**定義表頭*/protected String[] columnNames;/**欄位類型數組*/protected Class[] types;/**欄位可否編輯標記數組*/    protected boolean[] canEdit;        /**     *<br>方法說明:得到表格的列數, 繼承AbstractTableModel必須實現的方法     *<br>輸入參數:     *<br>傳回型別:int 列數     */    public int getColumnCount() {        return columnNames.length;    }    /**     *<br>方法說明:得到某一列的列名, 繼承AbstractTableModel必須實現的方法     *<br>輸入參數:col 列索引     *<br>傳回型別:String 列名     */    public String getColumnName(int col) {        return columnNames[col];    }    /**     *<br>方法說明:返回欄位類型     *<br>輸入參數:columnIndex 列索引     *<br>傳回型別:Class     */    public Class getColumnClass(int columnIndex) {        return types [columnIndex];    }    /**     *<br>方法說明:設定欄位是否可以編輯     *<br>輸入參數:rowIndex 行索引; columnIndex 列索引     *<br>傳回型別:boolean     */    public boolean isCellEditable(int rowIndex, int columnIndex) {        return canEdit [columnIndex];    }    /**     *<br>方法說明:得到儲存格的內容     *<br>輸入參數:rowIndex 行索引; columnIndex 列索引     *<br>傳回型別:boolean     */public Object getValueAt(int rowIndex, int columnIndex) {// TODO Auto-generated method stubreturn ((Vector)all.elementAt(rowIndex)).elementAt(columnIndex);}/**     *<br>方法說明:得到某一行的內容     *<br>輸入參數:rowIndex 行索引     *<br>傳回型別:boolean     */public Object getValueAt(int rowIndex) {// TODO Auto-generated method stubreturn all.elementAt(rowIndex);}/**     *<br>方法說明:清空表格     *<br>輸入參數:     *<br>傳回型別:void     */    public void empty() {    all.removeAllElements();    fireTableDataChanged();    }    /**     *<br>方法說明:設定結果集     *<br>輸入參數:temp 結果集     *<br>傳回型別:void     */    public void setRs(Vector vct) {    all.addAll(vct);    fireTableDataChanged();    }    /**     *<br>方法說明:得到表格的行數     *<br>輸入參數:     *<br>傳回型別:int 列數     */public int getRowCount() {// TODO Auto-generated method stubreturn all.size();}}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.