Package xgenerator.ui.swing

Source Code of xgenerator.ui.swing.MetadataTable

package xgenerator.ui.swing;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;

import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;

import xgenerator.constants.JavaTypes;
import xgenerator.ui.swing.adapter.ConstraintTypeComboBoxItemListener;
import xgenerator.ui.swing.adapter.MetadataTableModelListener;
import xgenerator.ui.swing.adapter.MetadataTableRowAction;
import xgenerator.ui.swing.adapter.TableColumnComboBoxPopupMenuListener;
import xgenerator.ui.swing.adapter.TableComboBoxPopupMenuListener;
import xgenerator.ui.swing.model.ComponentTypeComboBoxModel;
import xgenerator.ui.swing.model.ConstraintTypeComboBoxModel;
import xgenerator.ui.swing.model.SqlDataTypeComboBoxModel;
import xgenerator.ui.swing.model.PropertyTypeComboBoxModel;
import xgenerator.ui.swing.model.MetadataTableModel;
import xgenerator.ui.swing.model.QueryModeComboBoxModel;
import xgenerator.ui.swing.model.DeleteRuleComboBoxModel;

/**
* <p>
* Title:MetadataTable
* </p>
* <p>
* Description:
* </p>
* <p>
* Copyright: Copyright (c) 2012
* </p>
* <p>
* Company: liss
* </p>
* @author <a href="mailto:shushanlee@msn.com">liss</a>
* @version 1.0
* @see
* @since 1.0
*/
public class MetadataTable extends JTable implements UIConstants {
 
  /**
   * 表格行高
   */
  public static final int ROW_HEIGHT = 30;
 
  /**
   * 表格行选择背景色
   */
  public static final Color SELECTION_BACKGROUND_COLOR = new Color(207, 228, 249);
 
  /**
   * 表格行选择前景色
   */
  public static final Color SELECTION_FOREGROUND_COLOR = new Color(0, 0, 0);
 
  /**
   * 表格颜色
   */
  public static final Color GRID_COLOR = new Color(236, 233, 216);
 
  /**
   * UI组件
   */
  private Component parentComponent;

  /**
   * constructor
   * @param parentComponent
   */
  public MetadataTable(Component parentComponent) {
    this.parentComponent = parentComponent;
    this.initComponents();
  }

  /**
   * <p>
   * Title:初始化表格组件
   * </p>
   *
   * @author <a href="mailto:shushanlee@msn.com">liss</a>
   */
  private void initComponents() {
    this.setPreferredScrollableViewportSize(new Dimension(550, 30));
    this.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
    this.setAutoCreateRowSorter(true);
    this.setRowHeight(ROW_HEIGHT);
    this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//    this.setColumnSelectionAllowed(true);  //设置表格的的选取以单元格为单位
    this.setSelectionBackground(SELECTION_BACKGROUND_COLOR);
    this.setSelectionForeground(SELECTION_FOREGROUND_COLOR);
    this.setGridColor(GRID_COLOR);
//    this.setBackground(Color.RED);
//    this.setForeground(Color.YELLOW);
//    this.getSelectionModel().setSelectionInterval(1, 1);
//    this.getSelectionModel().setSelectionInterval(3, 1);
//    this.getSelectionModel().setSelectionInterval(5, 1);
//    this.setShowVerticalLines(false);
//    this.setShowHorizontalLines(false);
//    this.setShowGrid(false);

    /*
     * 表格上的弹出菜单
     */
    this.setComponentPopupMenu(buildTablePopupMenu());

    /*
     * 必须先设置TableModel,然后再设置TableColumnModel
     */
    this.setModel(new MetadataTableModel());
    this.setPreferredTableColumnStyle();

    /*
     * 添加TableModelListener
     */
    this.getModel().addTableModelListener(new MetadataTableModelListener(this));

    this.updateUI();
  }
 
  /**
   * <p>
   * Title:设置列样式
   * </p>
   * @author <a href="mailto:shushanlee@msn.com">liss</a>
   */
  public void setPreferredTableColumnStyle() {
    TableColumnModel tableColumnModel = this.getColumnModel(); // 列模型

    TableColumn column = null;
    for (int i = 0; i < tableColumnModel.getColumnCount(); i++) {
      column = tableColumnModel.getColumn(i);
      if (MetadataTableModel.COMMENTS_INDEX == i) {// 注释
        column.setPreferredWidth(250);
      } else if (MetadataTableModel.SQL_DATA_TYPE_INDEX == i) {// SQL数据类型
        JComboBox sqlDataTypeComboBox = new JComboBox(new SqlDataTypeComboBoxModel());
        column.setCellEditor(new DefaultCellEditor(sqlDataTypeComboBox));
        column.setPreferredWidth(220);
      } else if (MetadataTableModel.DATA_LENGTH_INDEX == i) {// 数据长度
        column.setPreferredWidth(100);
      } else if (MetadataTableModel.DATA_PRECISION_INDEX == i) {// 精度
        column.setPreferredWidth(100);
      } else if (MetadataTableModel.PROPERTY_TYPE_INDEX == i) {// 属性数据类型
        JComboBox propertyTypeComboBox = new JComboBox(new PropertyTypeComboBoxModel(new JavaTypes()));
        propertyTypeComboBox.setEditable(true);
        column.setCellEditor(new DefaultCellEditor(propertyTypeComboBox));
        column.setPreferredWidth(250);
      } else if (MetadataTableModel.NULLABLE_INDEX == i) {// isEmpty
        column.setPreferredWidth(120);
      else if (MetadataTableModel.DATA_DEFAULT_INDEX == i) {// defaultValue
        column.setPreferredWidth(130);
      } else if (MetadataTableModel.IS_KEY_FIELD_INDEX == i) {// isKey
        column.setPreferredWidth(70);
      } else if (MetadataTableModel.CONSTRAINT_TYPE_INDEX == i) {// keyType
        JComboBox constraintTypeComboBox = new JComboBox(new ConstraintTypeComboBoxModel());
        constraintTypeComboBox.addItemListener(new ConstraintTypeComboBoxItemListener(this));
        column.setCellEditor(new DefaultCellEditor(constraintTypeComboBox));
        column.setPreferredWidth(250);
      } else if (MetadataTableModel.REFERENCING_TABLE_INDEX == i) {// ReferencingTable
        JComboBox referencingTableComboBox = new JComboBox();
        referencingTableComboBox.addPopupMenuListener(new TableComboBoxPopupMenuListener(this));
        column.setCellEditor(new DefaultCellEditor(referencingTableComboBox));
//        column.setCellRenderer(new DefaultTableCellRenderer());
        column.setPreferredWidth(250);
      } else if (MetadataTableModel.REFERENCING_COLUMN_INDEX == i) {// ReferencingTableColumn
        JComboBox referencingTableColumnComboBox = new JComboBox();
        referencingTableColumnComboBox.addPopupMenuListener(new TableColumnComboBoxPopupMenuListener(this));
        column.setCellEditor(new DefaultCellEditor(referencingTableColumnComboBox));
        column.setPreferredWidth(250);
      } else if (MetadataTableModel.DELETE_RULE_INDEX == i) {// Referential Triggered Action
        JComboBox deleteRuleComboBox = new JComboBox(new DeleteRuleComboBoxModel());
        column.setCellEditor(new DefaultCellEditor(deleteRuleComboBox));
        column.setPreferredWidth(250);
      } else if (MetadataTableModel.IS_QUERY_FIELD_INDEX == i) {// queryField
        column.setPreferredWidth(120);
      } else if (MetadataTableModel.QUERY_MODE_INDEX == i) {// queryMode
        JComboBox queryModeComboBox = new JComboBox(new QueryModeComboBoxModel());
        column.setCellEditor(new DefaultCellEditor(queryModeComboBox));
        column.setPreferredWidth(200);
      } else if (MetadataTableModel.COMPONENT_TYPE_INDEX == i) {// componentType
        JComboBox componentTypeComboBox = new JComboBox(new ComponentTypeComboBoxModel());
        componentTypeComboBox.setRenderer(new ComponentTypeListCellRenderer());
        column.setCellEditor(new DefaultCellEditor(componentTypeComboBox));
        column.setPreferredWidth(250);
      } else {
        column.setPreferredWidth(200);
      }
    }
  }

  /**
   * <p>
   * Title:构建表格上的弹出菜单
   * </p>
   *
   * @author <a href="mailto:shushanlee@msn.com">liss</a>
   * @return
   */
  private JPopupMenu buildTablePopupMenu() {
    JPopupMenu popupMenu = new JPopupMenu("弹出菜单");

    JMenuItem menuItem = null;
   
    menuItem = new JMenuItem(new MetadataTableRowAction(this));
    menuItem.setText("复制注释->显示名称");
    menuItem.setIcon(IconUtils.createImageIcon(ICON_CLASS_PATH + "table_row_insert.png"));
    menuItem.setActionCommand(MetadataTableRowAction.COPY_COMMENT_TO_DISPLAY_NAME);
    popupMenu.add(menuItem);
   
    menuItem = new JMenuItem(new MetadataTableRowAction(this));
    menuItem.setText("复制全部注释->显示名称");
    menuItem.setIcon(IconUtils.createImageIcon(ICON_CLASS_PATH + "table_row_insert.png"));
    menuItem.setActionCommand(MetadataTableRowAction.COPY_ALL_COMMENT_TO_DISPLAY_NAME);
    popupMenu.add(menuItem);
   
    popupMenu.add(new JSeparator());
   
    JMenu menu = new JMenu("插入(I)");
    menu.setMnemonic('B');
   
    menuItem = new JMenuItem(new MetadataTableRowAction(this));
    menuItem.setText("在上方插入行(A)");
    menuItem.setMnemonic('A');
    menuItem.setIcon(IconUtils.createImageIcon(ICON_CLASS_PATH + "table_row_insert.png"));
    menuItem.setActionCommand(MetadataTableRowAction.INSERT_ROW_ABOVE_CURRENT_ROW_COMMAND);
    menu.add(menuItem);

    menuItem = new JMenuItem(new MetadataTableRowAction(this));
    menuItem.setText("在下方插入行(B)");
    menuItem.setMnemonic('B');
    menuItem.setIcon(IconUtils.createImageIcon(ICON_CLASS_PATH + "table_row_insert.png"));
    menuItem.setActionCommand(MetadataTableRowAction.INSERT_ROW_BELOW_CURRENT_ROW_COMMAND);
    menu.add(menuItem);
   
    popupMenu.add(menu);
   

    menuItem = new JMenuItem(new MetadataTableRowAction(this));
    menuItem.setText("添加行(A)");
    menuItem.setIcon(IconUtils.createImageIcon(ICON_CLASS_PATH + "table_row.png"));
    menuItem.setActionCommand(MetadataTableRowAction.INSERT_ROW_AT_BOTTOM_COMMAND);
    popupMenu.add(menuItem);
   
    popupMenu.add(new JSeparator());

    menuItem = new JMenuItem(new MetadataTableRowAction(this));
    menuItem.setText("删除行(D)");
    menuItem.setIcon(IconUtils.createImageIcon(ICON_CLASS_PATH + "table_row_delete.png"));
    menuItem.setActionCommand(MetadataTableRowAction.DELETE_ROW_COMMAND);
    menuItem.setEnabled(true);
    popupMenu.add(menuItem);

    return popupMenu;
  }

  /**
   * <p>
   * Title:
   * </p>
   * @author <a href="mailto:shushanlee@msn.com">liss</a>
   * @return
   */
  public Component getParentComponent() {
    return parentComponent;
  }

}
TOP

Related Classes of xgenerator.ui.swing.MetadataTable

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.