⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 catalogtable.java

📁 一个用java写的地震分析软件(无源码)-used to write a seismic analysis software (without source)
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package org.trinet.util.graphics.table;
import org.trinet.jasi.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.util.Arrays;
import org.trinet.util.*;

public class CatalogTable {
    private JTable  tableRowHead;
    private JTable  tableView;
    private CatalogTableModel tableModel;
    private TableSorterAbs  sorter;
    private JScrollPane  tableDB;
    private Font font;
    private int fontSize = 12;
    private final static String [] DEFAULT_NAME_ORDER = CatalogTableConstants.columnNames;
    private String [] columnNameOrder = DEFAULT_NAME_ORDER;

    public final void setColumnNameOrder(String [] names) {
       if (names != null) columnNameOrder = names;
    }
    public final String [] getColumnNameOrder() {
        return columnNameOrder;
    }

    static final int MAX_FRACTION_ELEMENTS=16;
    static final int COLUMN_WIDTH_PADDING=2;

// Table constructor
    public CatalogTable(CatalogTableModel tm) {
        this.tableModel = tm;
    }

    public String [] getTableColumnHeaders() {
        if (tableView == null) return null;
        int count = tableView.getColumnCount();
        if (count < 1) return null;
        String [] headers = new String[count];
        TableColumnModel tcm = tableView.getColumnModel();
        for (int i = 0; i < count; i++) {
            headers[i] = (String) tcm.getColumn(i).getHeaderValue();
        }
        return headers;
    }

    public int getSortedRowModelIndex(int selectedRow) {
        return sorter.indexes[selectedRow];
    }

    public TableSorterAbs getSortedModel() {
        return sorter;
    }

    public CatalogTableModel getModel() {
	return this.tableModel;
    }

    public JTable getRowHeader() {
	return tableRowHead;
    }

    public JTable getTable() {
	return tableView;
    }

    private final class TableHeaderRenderer extends DefaultTableCellRenderer {
        public Component getTableCellRendererComponent(JTable table, Object value,
                                                       boolean isSelected, boolean hasFocus, int row, int column) {
            if (table != null) {
                JTableHeader header = table.getTableHeader();
                if (header != null) {
                    setForeground(header.getForeground());
                    setBackground(header.getBackground());
                    setFont(header.getFont());
                }
            }

            setText((value == null) ? "" : value.toString());
//            setBorder(UIManager.getBorder("TableHeader.cellBorder"));
            setBorder(BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
            setHorizontalAlignment(JLabel.CENTER);
            return this;
        }
    }

// Implementation of Listener interface
    public class EditorMouseListener extends MouseAdapter {
        public void mousePressed(MouseEvent evt) {
            if ( evt.getModifiers() == MouseEvent.BUTTON3_MASK && evt.getClickCount() == 2) {
//                Debug.println("CatalogTable: EML Canceling edit");
                tableView.editingCanceled(new ChangeEvent(tableView));
                tableView.repaint();
            }
            else if ( evt.getModifiers() == MouseEvent.BUTTON2_MASK && evt.getClickCount() == 2) { 
//                Debug.println("CatalogTable: EML Stopping edit");
                tableView.editingStopped(new ChangeEvent(tableView));
//                tableView.repaint();
            }
        }
    }

    class TableEditListener implements ListSelectionListener {
      public void valueChanged(ListSelectionEvent e) {
/*
        Object obj = e.getSource();
//        Debug.println("CatalogTable: TableEditListener Source: " + e.getSource() );
        Component [] cmps = tableView.getComponents();
        for (int i  = 0; i<cmps.length; i++) {
//            Debug.println(cmps[i].getClass().getName());
            Component [] cmps2 = ((CellRendererPane)cmps[i]).getComponents();
            for (int j  = 0; j<cmps2.length; j++) {
//                Debug.println(cmps2[i].getClass().getName());
            }
        }
*/
//        if (tableView.isEditing()) tableView.editingCanceled(new ChangeEvent(tableView));
        if (tableView.isEditing()) tableView.editingStopped(new ChangeEvent(tableView));
      }
    }

    class TableRowHeadSelectionListener implements ListSelectionListener {
      public void valueChanged(ListSelectionEvent e) {
	if (tableRowHead.getSelectedRowCount() <= 0) return;
	int [] rows = tableRowHead.getSelectedRows();
        tableView.clearSelection(); 
	for (int index=0; index<rows.length; index++) {
	    tableView.addRowSelectionInterval(rows[index], rows[index]);
	}
      }
    }

    class TableViewSelectionListener implements ListSelectionListener {
      public void valueChanged(ListSelectionEvent e) {
	if (tableView.getSelectedRowCount() <= 0) return;
        int irow = tableView.getSelectedRow();
        int irow2 = tableRowHead.getSelectedRow(); // need to check for equivalence else race ValueChanged event loop.
        if (irow != irow2 && irow >= 0) {
            tableRowHead.clearSelection(); 
            tableRowHead.setRowSelectionInterval(irow, irow); 
        }
      }
    }

    public JScrollPane createTable(AbstractTableModel tableModel) {
      this.tableModel = (CatalogTableModel) tableModel;
      return createTable();
    }

    public JScrollPane createTable() {
//        Debug.println("CatalogTable setting up MainTable JTable scrollpane ...");
        sorter = new TableSorterAbs();
        sorter.setModel(tableModel);
        tableView = new JTable(sorter);
        if (font == null) font = new Font("Monospaced", Font.PLAIN, fontSize);
        tableView.setFont(font);
        tableView.setShowGrid(true);
        tableView.setAutoResizeMode(tableView.AUTO_RESIZE_OFF );
//      tableView.setToolTipText("double-click edits data field only if SELECT FOR UPDATE query");

//        tableView.sizeColumnsToFit(tableView.AUTO_RESIZE_NEXT_COLUMN );
//        tableView.getTableHeader().setUpdateTableInRealTime(false);
        tableView.getTableHeader().setForeground(Color.red);
        tableView.getTableHeader().setBackground(new Color(.85f,.85f,.85f));
        tableView.getTableHeader().setToolTipText("dbl-click sort ascend; shift-dbl-click sort descend");
        tableView.getTableHeader().setFont(font);

//        JScrollPane scrollpane = new JScrollPane(tableView);

// Make second table for row header
//        Debug.println("CatalogTable setting up RowHeader JTable scrollpane ...");
        TableColumnModel tcm = tableView.getColumnModel();
        TableColumnModel tcm2 = new DefaultTableColumnModel();
        int nkeyCols = 0;
        TableColumn col;
        int maxCol = tableModel.getColumnCount();
        for (int i = 0; i < maxCol; i++) {
            if (tableModel.isKeyColumn(i)) {
                col = tcm.getColumn(tcm.getColumnIndex((Object) tableModel.getColumnName(i)));
                tcm.removeColumn(col);
                tcm2.addColumn(col);
                nkeyCols++;
            }
// test of limited column view AWW 11/99
	    if (tableModel.isColumnHidden(i))
                tcm.removeColumn(tcm.getColumn(tcm.getColumnIndex((Object) tableModel.getColumnName(i))));
        }
	tcm.moveColumn(tcm.getColumnIndex((Object) "MAG"), 4);
//
// test to change column order here?
        TableColumnModel tcmTmp = new DefaultTableColumnModel();
        maxCol = columnNameOrder.length; 
        for (int i = 0; i < maxCol; i++) {
            String colName = columnNameOrder[i];
            try {
                tcmTmp.addColumn(tableView.getColumn(colName));
            }
            catch (IllegalArgumentException ex) {
                System.out.println("Check column order by name - No such table column name:" + colName);
            }
        }
        tableView.setColumnModel(tcmTmp);
        tcm = tcmTmp;
// end of test
        tableRowHead = new JTable(sorter); 
        tableRowHead.setColumnModel(tcm2);
        tableRowHead.setFont(font);
        tableRowHead.setShowGrid(true);
        tableRowHead.setAutoResizeMode( tableRowHead.AUTO_RESIZE_OFF );

//        tableRowHead.sizeColumnsToFit(tableRowHead.AUTO_RESIZE_NEXT_COLUMN );
//        tableRowHead.getTableHeader().setUpdateTableInRealTime(false);
        tableRowHead.getTableHeader().setForeground(Color.red);
        tableRowHead.getTableHeader().setBackground(new Color(.85f,.85f,.85f));
        tableRowHead.getTableHeader().setFont(font);
        tableRowHead.getTableHeader().setToolTipText("dbl-click sort ascend; shift-dbl-click sort descend");
        
// Setup format patterns and number renderers
        FormattedNumberRenderer [] numberRenderer = new FormattedNumberRenderer [MAX_FRACTION_ELEMENTS];
        FormattedNumberEditor_FW [] numberEditor = new FormattedNumberEditor_FW [MAX_FRACTION_ELEMENTS];
        String pattern;                   // format pattern buffer
        String pattern9 = "#0.000000"; // generic four byte float
        FormattedNumberRenderer numberRenderer9 = new FormattedNumberRenderer(pattern9);
        FormattedNumberEditor_FW numberEditor9 = new FormattedNumberEditor_FW(pattern9);
        numberEditor9.getComponent().addMouseListener(new EditorMouseListener());

// Assign editor/renderers to table columns        
// comment out for rendering test aww
        for (int i = 0; i<tableView.getColumnCount(); i++) {
          TableColumn tc = tcm.getColumn(i);
          tc.setHeaderRenderer(new TableHeaderRenderer());
          Class tmpclass = tableView.getColumnClass(i);
//	  Debug.println("CatalogTable tableView getColumnClass (i)" + i + " " + tmpclass.getName());
          if (tmpclass.getName().indexOf("String") >= 0) {
                  tc.setCellRenderer(new TextCellRenderer(font));
                  TextCellEditor textEditor = new TextCellEditor(font);
                  textEditor.getComponent().addMouseListener(new EditorMouseListener());
                  tc.setCellEditor(textEditor);
          }
          else if (tmpclass.getName().indexOf("Double") >= 0) {
                  int indexViewToModel = tableView.convertColumnIndexToModel(i);
                  int fractionWidth = tableModel.getColumnFractionDigits(indexViewToModel);
                  if (fractionWidth >= 0) {
                    if (fractionWidth > MAX_FRACTION_ELEMENTS - 1 ) fractionWidth = MAX_FRACTION_ELEMENTS - 1;
                    pattern = getNumberFormatPattern(fractionWidth);
                    if (numberRenderer[fractionWidth] == null) 
                      numberRenderer[fractionWidth] = new FormattedNumberRenderer(pattern);
                    if (numberEditor[fractionWidth] == null) { 
                          numberEditor[fractionWidth] = new FormattedNumberEditor_FW(pattern);
                        numberEditor[fractionWidth].getComponent().addMouseListener(new EditorMouseListener());
                    }
                    tc.setCellEditor(numberEditor[fractionWidth]);
                    tc.setCellRenderer(numberRenderer[fractionWidth]);
                  }
                  else if (fractionWidth < 0 ) {
                    tc.setCellEditor(numberEditor9);
                    tc.setCellRenderer(numberRenderer9);
                  }
          }
          else if (tmpclass.getName().indexOf("Long") >= 0 || tmpclass.getName().indexOf("Integer") >= 0 ||
                tmpclass.getName().indexOf("Number") >= 0 ) {
                  pattern = getNumberFormatPattern(0);
                  if (numberRenderer[0] == null) numberRenderer[0] = new FormattedNumberRenderer(pattern);
                  if (numberEditor[0] == null) {
                        numberEditor[0] = new FormattedNumberEditor_FW(pattern);
                        numberEditor[0].getComponent().addMouseListener(new EditorMouseListener());
                  }
                  tc.setCellEditor(numberEditor[0]);
                  tc.setCellRenderer(numberRenderer[0]);
          }
        }

        CalendarDateRenderer cdRenderer = new CalendarDateRenderer();
        cdRenderer.setHorizontalAlignment(JLabel.LEFT);
        tableView.setDefaultRenderer(java.sql.Date.class, cdRenderer);
        DateTimeEditor dtEditor = new DateTimeEditor(font);
        dtEditor.getComponent().addMouseListener(new EditorMouseListener());
        DateTimeRenderer dtRenderer = new DateTimeRenderer();
        dtRenderer.setHorizontalAlignment(JLabel.LEFT);
        
        for (int i = 0; i<tableView.getColumnCount(); i++) {
//        Debug.println("CatalogTable tableView getColumnName (i)" + i + " " + tableView.getColumnName(i));
          if (tableView.getColumnName(i).equalsIgnoreCase("datetime")) {
                TableColumn tc = tcm.getColumn(i);
                tc.setCellRenderer(dtRenderer);
                tc.setCellEditor(dtEditor);
          }
        }
//comment out for test of rendering
// size scrollable main table columns
//        Debug.println("CatalogTable sizing MainTable columns");        
        initColumnSizes(tableView);

// setup main table selection/color attributes
        tableView.setCellSelectionEnabled(false);
        tableView.setRowSelectionAllowed(true);
        tableView.setColumnSelectionAllowed(false);
        tableView.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        tableView.setForeground(Color.black);
        tableView.setBackground(new Color(1.f,1.f,0.7f));
        tableView.setSelectionForeground(Color.red);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -