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

📄 jwatvariableinputtable.java

📁 一个用于排队系统仿真的开源软件,有非常形象的图象仿真过程!
💻 JAVA
字号:
package jmt.engine.jwat.workloadAnalysis.tables;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Vector;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ActionMap;
import javax.swing.DefaultCellEditor;
import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JPopupMenu;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.KeyStroke;
import javax.swing.event.TableModelEvent;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;

import jmt.engine.jwat.workloadAnalysis.tables.listeners.RowDeleteListener;
import jmt.gui.common.CommonConstants;
import jmt.gui.common.resources.ImageLoader;
import jmt.gui.exact.table.ComboBoxCell;
import jmt.gui.jsim.editors.ButtonCellEditor;
import jmt.gui.jwat.JWATConstants;

public class JWatVariableInputTable extends JTable implements CommonConstants,JWATConstants {
	/* Set of column dimensions */
	protected int[] columnSizes = new int[] { 100, 60, 38, 145, 30, 100, 30, 30, 18 };

	public static final Object[] VarTypes = new Object[] { "Numeric", "String", "Date" };
	protected JComboBox combobox = new JComboBox(VarTypes);
	//NEW 
	//public static final Object[] regularExpr = new Object[] {"\\d+.\\d+.\\d+.\\d","\\d\\d/\\w\\w\\w/\\d\\d\\d\\d:\\d\\d:\\d\\d:\\d\\d[^\\]]+"};	//Regular Expr.
	//protected JComboBox regCombo = new JComboBox(regularExpr);
	
	protected AbstractAction deleteVar = new AbstractAction("") {
		{
			putValue(Action.SHORT_DESCRIPTION, "Delete");
			putValue(Action.SMALL_ICON, ImageLoader.loadImage("Delete"));
		}

		public void actionPerformed(ActionEvent arg0) {
			((JWatVariableInputTableModel) JWatVariableInputTable.this
					.getModel()).deleteRow(JWatVariableInputTable.this
					.getSelectedRow());
			JWatVariableInputTable.this.tableChanged(new TableModelEvent(
					JWatVariableInputTable.this.getModel()));
			fireDeleteEvent();
		}
	};

	protected JButton delVar = new JButton() {
		{
			setAction(deleteVar);
			setFocusable(true);
		}
	};
	
	// Sets a table model for visualization and editing of data
	public void setModel(JWatVariableInputTableModel tabMod) {
		super.setModel(tabMod);
		sizeColumnsAndRows();
		setRowHeight(ROW_HEIGHT);
		this.getColumnModel().getColumn(1).setCellEditor(
				new DefaultCellEditor(combobox));
		/*this.getColumnModel().getColumn(5).setCellEditor(
				new DefaultCellEditor(combobox));*/
		this.getColumnModel().getColumn(columnSizes.length - 1).setCellEditor(
				new ButtonCellEditor(new JButton(deleteVar)));
	}

	// set sizes for columns and rows of this table.
	protected void sizeColumnsAndRows() {
		for (int i = 0; i < columnSizes.length && i < getColumnCount(); i++) {
			this.getColumnModel().getColumn(i)
					.setPreferredWidth(columnSizes[i]);
			if (i == 1)
				this.getColumnModel().getColumn(i).setMaxWidth(columnSizes[i]);
			if (i == 2)
				this.getColumnModel().getColumn(i).setMaxWidth(columnSizes[i]);
			if (i == columnSizes.length - 1) {
				// delete button and containing table cells as well, must be square
				this.getColumnModel().getColumn(i).setMaxWidth(columnSizes[i]);
				this.setRowHeight(columnSizes[i]);
			}
		}
	}

	public TableCellRenderer getCellRenderer(int row, int column) {
		/*if (column == 5)
			return new ComboBoxCell(regularExpr);*/
		if (column == 0 || column == 3 || column == 4 || column == 5 || column == 6 || column == 7)
			return getDefaultRenderer(String.class);
		if (column == columnSizes.length-1)
			return new ButtonCellEditor(delVar);
		if (column == 2)
			return getDefaultRenderer(Boolean.class);
		if (column == 1)
			return new ComboBoxCell(VarTypes);
		return null;
	}

	/* returns customized editor for table cells. */
	public TableCellEditor getCellEditor(int row, int column) {
	/*	if (column == 5) {
			return new DefaultCellEditor(regCombo);
		}*/
		if (column == 1) {
			return new DefaultCellEditor(combobox);
		} else if (column == columnSizes.length - 1) {
			return new ButtonCellEditor(new JButton(deleteVar));
		} else
			return super.getCellEditor(row, column);
	}
	
	//Update 19/10/2006
	protected MouseHandler mouseHandler;
	private Vector deleteLisener = new Vector(); //<RowDeleteListener>
	
	public void addDeleteRowListener(RowDeleteListener r){
		if(!deleteLisener.contains(r)) deleteLisener.add(r);
	}
	
	private void fireDeleteEvent(){
		for(int i = 0;i < deleteLisener.size(); i++){
			((RowDeleteListener) deleteLisener.get(i)).rowsDeletedEvent();
		}
	}
	
	public AbstractAction CLEAR_ACTION = new AbstractAction("Clear") {
		{
			putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0, false));
			putValue(Action.SHORT_DESCRIPTION, "Clears selected cells");
		}

		public void actionPerformed(ActionEvent e) {
			clearCells();
		}
	};

	public AbstractAction DESEL_ACTION = new AbstractAction("Deselect all") {
		{
            putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_D, ActionEvent.CTRL_MASK, false));
            putValue(Action.SHORT_DESCRIPTION, "Deselected all variable in format table");
        }

        public void actionPerformed(ActionEvent e) {
        	((JWatVariableInputTableModel)dataModel).deselectAll();
        	tableChanged(new TableModelEvent(dataModel));
		}
	};

	 private AbstractAction deleteClass = new AbstractAction("Delete selected varaible") {
	        {
	            putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0, false));
	            putValue(Action.SHORT_DESCRIPTION, "Deletes selected variable from the format");
	        }

	        public void actionPerformed(ActionEvent e) {
	           clearCells();
	        }
	    };
	
	    private AbstractAction deselectAll = new AbstractAction("Deselect all variables"){
	    	{
	            putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_D, ActionEvent.CTRL_MASK, false));
	            putValue(Action.SHORT_DESCRIPTION, "Deselected all variable in format table");
	        }

	        public void actionPerformed(ActionEvent e) {
	        	((JWatVariableInputTableModel)dataModel).deselectAll();
	        	tableChanged(new TableModelEvent(dataModel));
	        }	    	
	    };
	
	protected void installKeyboard() {
		InputMap im = getInputMap();
		ActionMap am = getActionMap();
		installKeyboardAction(im, am, CLEAR_ACTION);
		installKeyboardAction(im, am, DESEL_ACTION);
	}
	
	protected void installKeyboardAction(Action a) {
		installKeyboardAction(getInputMap(), getActionMap(), a);
	}

	protected void installKeyboardAction(InputMap im, ActionMap am, Action a) {
		Object name = a.getValue(Action.NAME);
		KeyStroke key = (KeyStroke) a.getValue(Action.ACCELERATOR_KEY);
		im.put(key, name);
		am.put(name, a);
	}
	
	private void clearCells(){
		int numrows = getSelectedRowCount();
		int[] rowsselected = getSelectedRows();
		for (int i = 0; i < numrows; i++) {
			((JWatVariableInputTableModel)dataModel).deleteRow(rowsselected[numrows-1-i]);
		}
		tableChanged(new TableModelEvent(dataModel));
		fireDeleteEvent();
	}
	
	public JWatVariableInputTable(){
		super();
		//regCombo.setEditable(true);
		combobox.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(JWatVariableInputTable.this.getSelectedRow() != -1){
					switch(combobox.getSelectedIndex()){
					case NUMERIC:
						JWatVariableInputTable.this.setValueAt("",JWatVariableInputTable.this.getSelectedRow(),4);
						JWatVariableInputTable.this.setValueAt("([+-])?\\d+([.]\\d+)?",JWatVariableInputTable.this.getSelectedRow(),5);
						break;
					case STRING:
						JWatVariableInputTable.this.setValueAt("\"",JWatVariableInputTable.this.getSelectedRow(),4);
						JWatVariableInputTable.this.setValueAt("\\w+",JWatVariableInputTable.this.getSelectedRow(),5);
						break;
					case DATE:
						JWatVariableInputTable.this.setValueAt("[]",JWatVariableInputTable.this.getSelectedRow(),4);
						JWatVariableInputTable.this.setValueAt("\\d\\d/\\w\\w\\w/\\d\\d\\d\\d:\\d\\d:\\d\\d:\\d\\d[^\\]]+",JWatVariableInputTable.this.getSelectedRow(),5);
						break;
						default:
					}
				} 
			}
		});
		setSelectionBackground(new Color(181,189,214));
		setSelectionForeground(Color.BLACK);
		installKeyboard();
		installMouse();
	}
	
	protected JPopupMenu makeMouseMenu() {
		JPopupMenu menu = new JPopupMenu();
		menu.add(deleteClass);
		menu.add(new JSeparator());
		menu.add(deselectAll);
		return menu;
	}
	
	protected void installMouse() {
		mouseHandler = new MouseHandler(makeMouseMenu());
		mouseHandler.install();
	}
	
	private void controlSelection(){
		if(getSelectedRow() != -1){
			CLEAR_ACTION.setEnabled(true);
			deleteClass.setEnabled(true);
		}else{
			CLEAR_ACTION.setEnabled(false);
			deleteClass.setEnabled(false);
		}
	}
	
	protected class MouseHandler extends MouseAdapter {

		private boolean isInstalled;
		private JPopupMenu menu;

		public MouseHandler(JPopupMenu menu) {
			this.menu = menu;
		}


		public void install() {
			if (!isInstalled) {
				addMouseListener(this);
				isInstalled = true;
			}
		}

		public void uninstall() {
			if (isInstalled) {
				removeMouseListener(this);
				isInstalled = false;
			}
		}

		public void mousePressed(MouseEvent e) {
			processME(e);
		}

		public void mouseReleased(MouseEvent e) {
			processME(e);
		}

		protected void processME(MouseEvent e) {
			if (e.isPopupTrigger()) {
				controlSelection();
				menu.show(e.getComponent(), e.getX(), e.getY());
			}
		}

		public JPopupMenu getMenu() {
			return menu;
		}

	}

}

⌨️ 快捷键说明

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