亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gridcontroller.java

?? Java寫的ERP系統(tǒng)
?? JAVA
?? 第 1 頁 / 共 2 頁
字號(hào):
/******************************************************************************
 * The contents of this file are subject to the   Compiere License  Version 1.1
 * ("License"); You may not use this file except in compliance with the License
 * You may obtain a copy of the License at http://www.compiere.org/license.html
 * Software distributed under the License is distributed on an  "AS IS"  basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
 * the specific language governing rights and limitations under the License.
 * The Original Code is                  Compiere  ERP & CRM  Business Solution
 * The Initial Developer of the Original Code is Jorg Janke  and ComPiere, Inc.
 * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts
 * created by ComPiere are Copyright (C) ComPiere, Inc.;   All Rights Reserved.
 * Contributor(s): ______________________________________.
 *****************************************************************************/
package org.compiere.grid;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.beans.*;
import java.util.*;

import org.compiere.grid.ed.*;
import org.compiere.grid.tree.*;
import org.compiere.apps.*;
import org.compiere.model.*;
import org.compiere.util.*;
import org.compiere.swing.*;
import org.compiere.plaf.*;

/**
 *  The Grid Controller is the panel for single and multi-row presentation
 *  and links to the Model Tab.
 *  <pre>
 *  UI Structure:
 *  this    (BorderLayout)
 *      splitPane (JSplitPane)
 *          left
 *              graphicPanel
 *          right
 *              cardPanel   JPanel  (CardLayout)
 *                  srPane  JScrollPane
 *                      vPanel  VPanel (GridBagLayout)
 *                  mrPane  JScrollPane
 *                      vTable  VTable
 *
 *  <B>DataBinding:<B>
 *  - MultiRow - is automatic between VTable and MTable
 *  - SingleRow
 *		- from VEditors via fireVetoableChange(m_columnName, null, getText());
 *			(vetoableChange)
 *		- to VEditors via updateSingleRow -> Editor.setValue(object)
 *
 *  Event Chains
 *  -- Navigation --
 *  (VTable selection -> GridController.valueChanged)
 *  (APanel selection)
 *      + MTab.navivate
 *          + MTab.setCurrentRow
 *              + Update all MFields
 *                  + MField.setValue
 *                      + setContext
 *                      + fire PropertyChange "Value"
 *                          + VEditor.propertyChange
 *                              + VEditor.setValue
 *              + MTab.fireProperyChange "CurrentRow"
 *                  + VTable.propertyChange (setRowSelectionInterval)
 *                      + GridController.valueChange
 *                          + GridController.dynamicDisplay(complete)
 *              + MTab.fireDataStatusChanged
 *                  + APanel.statusChanged
 *
 *  -- ValueChanges --
 *  VEditor.fireVetoableChange
 *      + (VCellEditor.vetoableChange/getCellEditorValue)   -- multi-row source
 *      + (GridController.vetoableChange)                   -- single-row source
 *          + MTable.setValueAt
 *              + MField.setValue
 *                  + setContext
 *                  + fire PropertyChange "Value"
 *                      + VEditor.setValue
 *              + MTable.fireDataStatusChanged
 *                  + MTab.dataStatusChanged
 *                      + MTab.fireDataStatusChanged
 *                          + APanel.statusChanged
 *                  + GridController.dataStatusChanged
 *                      + GridController.dynamicDisplay(selective)
 *  </pre>
 * @author  Jorg Janke
 * @version $Id: GridController.java,v 1.34 2003/05/04 06:41:17 jjanke Exp $
 */
public class GridController extends CPanel
	implements DataStatusListener, ListSelectionListener, VetoableChangeListener, PropertyChangeListener
{
	/**
	 *  Constructor - you need to call initGrid for instanciation
	 */
	public GridController()
	{
		try
		{
			jbInit();
		}
		catch(Exception e)
		{
			Log.error("GridController", e);
		}
	}   //  GridController

	/**
	 *  toString
	 *  @return string representation
	 */
	public String toString()
	{
		return "GridController for " + m_mTab;
	}   //  toString

	/**
	 *  The Layout
	 */
	private BorderLayout mainLayout = new BorderLayout();
	private JSplitPane splitPane = new JSplitPane();
	private CPanel graphPanel = new CPanel();
	private BorderLayout graphLayout = new BorderLayout();
	private CPanel cardPanel = new CPanel();
	private CardLayout cardLayout = new CardLayout();
	private JScrollPane srPane = new JScrollPane();
	private JScrollPane mrPane = new JScrollPane();
	private CPanel xPanel = new CPanel();
	private FlowLayout xLayout = new FlowLayout();
	private VTable vTable = new VTable();
	private VPanel vPanel = new VPanel();

	/**
	 *  Static Layout init
	 *  @throws Exception
	 */
	private void jbInit() throws Exception
	{
		this.setLayout(mainLayout);
		this.add(splitPane, BorderLayout.CENTER);
		splitPane.setOpaque(false);
		graphPanel.setLayout(graphLayout);
		//
		splitPane.add(graphPanel, JSplitPane.LEFT);
		splitPane.add(cardPanel, JSplitPane.RIGHT);
		splitPane.setBorder(null);
		splitPane.setName("gc_splitPane");
		//
		cardPanel.setLayout(cardLayout);
		cardPanel.add(srPane, "srPane");
		cardPanel.add(mrPane, "mrPane");
		cardPanel.setBorder(null);
		cardPanel.setName("gc_cardPanel");
		//  single row (w/o xPane it would be centered)
		srPane.setBorder(null);
		srPane.getViewport().add(xPanel, null);
		srPane.setName("gc_srPane");
		xPanel.setLayout(xLayout);
		xPanel.setName("gc_xPanel");
		xLayout.setAlignment(FlowLayout.LEFT);
		xLayout.setHgap(0);
		xLayout.setVgap(0);
		xPanel.add(vPanel);
		//  multi-row
		mrPane.setBorder(null);
		mrPane.getViewport().add(vTable, null);
		mrPane.setName("gc_mrPane");
		//
		graphPanel.setBorder(null);
		graphPanel.setName("gc_graphPanel");
	}   //  jbInit

	/**
	 *  Displose
	 */
	public void dispose()
	{
		Log.trace(Log.l2_Sub, "GridController.dispose (" + m_mTab.toString() + ")");
		//  clear info
		stopEditor(false);
		if (m_mTab.needSave(true, false))
			m_mTab.dataIgnore();

		//  Listeners
		m_mTab.getTableModel().removeDataStatusListener(this);
		m_mTab.getTableModel().removeVetoableChangeListener(this);
		vTable.getSelectionModel().removeListSelectionListener(this);
		m_mTab.removePropertyChangeListener(vTable);

		//  editors
		Component[] comp = vPanel.getComponents();
		for (int i = 0; i < comp.length; i++)
		{
			if (comp[i] instanceof VEditor)
			{
				VEditor vEditor = (VEditor)comp[i];
				vEditor.removeVetoableChangeListener(this);
				String columnName = comp[i].getName();
				MField mField = m_mTab.getField(columnName);
				if (mField != null)
					mField.removePropertyChangeListener(vEditor);
				vEditor.dispose();
			}
		}
		/** @todo Remove APanel Button listeners */

		vTable.removeAll();
		vTable.setModel(new DefaultTableModel());   //  remove reference
		vTable = null;
		vPanel.removeAll();
		vPanel = null;
		splitPane.removeAll();
		splitPane = null;
		m_mTab = null;
		m_tree = null;
		this.removeAll();
	}   //  dispose

	/** Model Tab                   */
	private MTab        m_mTab = null;
	/** Window                      */
	private int         m_WindowNo;
	/** Only Multi-Row exist        */
	private boolean     m_onlyMultiRow = false;
	/** Single/Multi Row indicator  */
	private boolean     m_singleRow = true;
	/** Veto Active                 */
	private boolean     m_vetoActive = false;
	/** Tree Panel (optional)       */
	private VTreePanel  m_tree;

	/*************************************************************************/

	/**
	 *  Init Grid.
	 *  <pre>
	 *  - Map table to model
	 *  - Update (multi-row) table info with renderers/editors
	 *  - build single-row panel
	 *  - initialize display
	 *  </pre>
	 *  @param mTab tab
	 *  @param onlyMultiRow only table
	 *  @param WindowNo window no
	 *  @param aPanel optional Application Panel for adding button listeners
	 *  @return true if initialized
	 */
	public boolean initGrid (MTab mTab, boolean onlyMultiRow, int WindowNo, APanel aPanel)
	{
		Log.trace(Log.l2_Sub, "GridController.initGrid (" + mTab.toString() + ")");
		m_mTab = mTab;
		m_WindowNo = WindowNo;
		m_onlyMultiRow = onlyMultiRow;

		//  Set up Multi Row Table
		vTable.setModel(mTab.getTableModel());

		//  Update Table Info -------------------------------------------------
		int size = m_mTab.getFieldCount();
		for (int i = 0; i < size; i++)
		{
			TableColumn tc = getTableColumn(i);
			MField mField = m_mTab.getField(i);
			//
			if (mField.getColumnName().equals(tc.getIdentifier().toString()))
			{
				if (mField.getDisplayType() == DisplayType.RowID)
				{
					tc.setCellRenderer(new VRowIDRenderer(false));
					tc.setCellEditor(new VRowIDEditor(false));
					tc.setHeaderValue("");
					tc.setMaxWidth(2);
				}
				else
				{
					//  need to set CellEditor explicitly as default editor based on class causes problem (YesNo-> Boolean)
					tc.setCellRenderer(new VCellRenderer(mField));
					VCellEditor ce = new VCellEditor(mField);
					tc.setCellEditor(ce);
					if (mField.isDisplayed())
					{
						tc.setHeaderValue(mField.getHeader());
						tc.setPreferredWidth(Math.max(mField.getDisplayLength(), 30));
						//  Enable Button actions in grid
						if (mField.getDisplayType() == DisplayType.Button)
						{
							VEditor button = ce.getEditor();
							if (button != null && aPanel != null)
								((JButton)button).addActionListener(aPanel);
						}
					}
					else    //  column not displayed
					{
						tc.setHeaderValue(null);
						tc.setMinWidth(0);
						tc.setMaxWidth(0);
						tc.setPreferredWidth(0);
					}
				}
				tc.setHeaderRenderer(new VHeaderRenderer(mField.getDisplayType()));
			}
			else
				Log.error("GridController.initGrid - TableColumn <> MField");
		}   //  Update Table Info

		//  Set Color on Tab Level
		//  this.setBackgroundColor (mTab.getColor());

		//  Single Row  -------------------------------------------------------
		if (!m_onlyMultiRow)
		{
			for (int i = 0; i < size; i++)
			{
				MField mField = m_mTab.getField(i);

				if (mField.isDisplayed())
				{
					VEditor vEditor = VEditorFactory.getEditor(m_mTab, mField, false);
					//  MField => VEditor - New Field value to be updated to editor
					mField.addPropertyChangeListener(vEditor);
					//  VEditor => this - New Editor value to be updated here (MTable)
					vEditor.addVetoableChangeListener(this);
					//  Add to VPanel
					vPanel.addField(VEditorFactory.getLabel(mField), vEditor,
						mField.isSameLine(),
						mField.isLongField(),
						mField.getDisplayType(),
						mField.getFieldGroup());
					//  APanel Listen to buttons
					if (mField.getDisplayType() == DisplayType.Button && aPanel != null)
						((JButton)vEditor).addActionListener (aPanel);
				}
			}   //  for all fields

			//  Use SR to size MR
			mrPane.setPreferredSize(vPanel.getPreferredSize());
		}   //  Single-Row

		//  Tree Graphics Layout
		int AD_Tree_ID = 0;
		if (mTab.isTreeTab())
			AD_Tree_ID = MTree.getAD_Tree_ID (mTab.getKeyColumnName());
		if (mTab.isTreeTab() && AD_Tree_ID != 0)
		{
			m_tree = new VTreePanel(m_WindowNo, false, true);
			if (mTab.getTabNo() == 0)	//	initialize other tabs later
				m_tree.initTree(AD_Tree_ID);
			m_tree.addPropertyChangeListener(VTreePanel.NODE_SELECTION, this);
			graphPanel.add(m_tree, BorderLayout.CENTER);
			splitPane.setDividerLocation(250);
		//	splitPane.resetToPreferredSizes();
		}
		else    //  No Graphics - hide
		{
			graphPanel.setPreferredSize(new Dimension(0,0));
			splitPane.setDividerSize(0);
			splitPane.setDividerLocation(0);
		}

		//  Receive DataStatusChanged info from MTab
		mTab.addDataStatusListener(this);
		//  Receive vetoableChange info from MTable when saving
		mTab.getTableModel().addVetoableChangeListener(this);
		//	Selection Listener -> valueChanged
		vTable.getSelectionModel().addListSelectionListener(this);
		//  Navigation (RowChanged)
		m_mTab.addPropertyChangeListener(vTable);

		//  Update UI
		vTable.autoSize();

		setTabLevel(mTab.getTabLevel());

		//  Set initial presentation
		if (onlyMultiRow || !m_mTab.isSingleRow())
			switchMultiRow();
		else
			switchSingleRow();
	//	Log.trace(Log.l2_Sub, "GridController.dynInit (" + mTab.toString() + ") - fini");
		return true;
	}   //  initGrid

	/**
	 * 	Activate Grid Controller.
	 * 	Called by APanel when GridController is displayed (foreground)
	 */
	public void activate ()
	{
		//	Tree to be initiated on second/.. tab
		if (m_mTab.isTreeTab() && m_mTab.getTabNo() != 0)
		{
			int AD_Tree_ID = Env.getContextAsInt (Env.getCtx(), m_WindowNo, "AD_Tree_ID");
			if (AD_Tree_ID == 0)
				AD_Tree_ID = MTree.getAD_Tree_ID (m_mTab.getKeyColumnName());
			m_tree.initTree (AD_Tree_ID);
		}
	}	//	activate


	/**
	 *  Register ESC Actions
	 *  - overwrite VTable's Keystroks assigment for ESC
	 *  @param aIgnore ignore
	 */
	public void registerESCAction (AppsAction aIgnore)
	{
		int c = VTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT;
		vTable.getInputMap(c).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), aIgnore.getName());
		vTable.getActionMap().put(aIgnore.getName(), aIgnore);

	//	AEnv.printActionInputMap(vTable);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区四区久久| 日韩一级成人av| 另类小说色综合网站| 中文字幕欧美日韩一区| 欧美军同video69gay| av在线一区二区| 久久99精品一区二区三区三区| 亚洲欧洲一区二区三区| 精品久久久影院| 欧美日韩国产影片| 成人a级免费电影| 黑人巨大精品欧美一区| 一个色在线综合| 中文字幕在线一区| 久久久精品日韩欧美| 欧美高清精品3d| 在线观看免费一区| 91影院在线观看| 国产成人av电影在线| 国产主播一区二区三区| 天天做天天摸天天爽国产一区 | 在线视频亚洲一区| 波多野结衣中文字幕一区二区三区 | 国产免费观看久久| 日韩三级视频在线看| 欧美午夜精品久久久| 欧美无人高清视频在线观看| 94-欧美-setu| av一区二区三区黑人| 国产不卡在线播放| 风间由美一区二区三区在线观看| 久久精品久久精品| 国内精品免费**视频| 久久国产精品免费| 狠狠狠色丁香婷婷综合久久五月| 免费成人av资源网| 久久激情五月婷婷| 捆绑调教一区二区三区| 美国精品在线观看| 国产自产v一区二区三区c| 精品亚洲aⅴ乱码一区二区三区| 蜜桃精品视频在线| 激情偷乱视频一区二区三区| 精品一区二区免费看| 激情小说欧美图片| 国产成人av电影在线| 成人性生交大合| 成人app在线观看| 色呦呦网站一区| 欧美亚洲一区二区在线观看| 在线观看亚洲一区| 欧美一区二区三区男人的天堂| 欧美裸体bbwbbwbbw| 欧美一区二区三区在线观看视频| 91精品久久久久久久久99蜜臂| 欧美老年两性高潮| 精品理论电影在线观看| 久久久久国产精品厨房| 国产精品系列在线| 亚洲免费av高清| 天堂资源在线中文精品| 久久av资源网| 成人永久aaa| 日本精品视频一区二区| 欧美精品xxxxbbbb| 日韩欧美一级片| 国产精品久久久久久久岛一牛影视| 中文字幕日韩精品一区| 亚洲国产视频一区二区| 久久99国内精品| 成人高清视频在线观看| 欧美性欧美巨大黑白大战| 3atv一区二区三区| 欧美激情中文不卡| 亚洲成人午夜电影| 国产一区在线精品| 91高清视频免费看| 日韩你懂的在线播放| 国产精品少妇自拍| 婷婷国产v国产偷v亚洲高清| 国产精品综合久久| 欧美在线一二三四区| 久久亚洲综合av| 一区二区久久久| 国产在线精品一区二区三区不卡| 91麻豆国产福利精品| 欧美本精品男人aⅴ天堂| 一区在线观看免费| 激情综合五月天| 欧美视频在线观看一区| 久久久不卡影院| 日韩精品亚洲专区| 91亚洲精品久久久蜜桃网站| 日韩三级免费观看| 亚洲欧美色一区| 国产自产2019最新不卡| 欧美日韩不卡一区| 国产精品久久777777| 美女精品一区二区| 在线精品视频一区二区| 久久精品无码一区二区三区| 午夜av电影一区| 一本在线高清不卡dvd| 久久久久久久久蜜桃| 香蕉久久夜色精品国产使用方法| 成人一区二区三区| 精品久久久久久久久久久久久久久久久 | 在线一区二区三区四区五区| 久久精品一区蜜桃臀影院| 日韩激情视频网站| 91福利精品视频| 最近中文字幕一区二区三区| 国产一区二区在线看| 欧美一区二区三区免费大片 | 日韩福利电影在线| 91国产福利在线| 亚洲摸摸操操av| 成人免费毛片a| 久久久不卡影院| 国产在线一区二区| 日韩你懂的电影在线观看| 日韩国产成人精品| 欧美三级视频在线观看| 亚洲精品v日韩精品| 99这里只有精品| 国产精品第13页| 成人教育av在线| 欧美高清在线一区| 国产91丝袜在线播放九色| 久久久精品影视| 粉嫩高潮美女一区二区三区| 久久久不卡网国产精品二区| 国内精品伊人久久久久av一坑| 日韩欧美不卡在线观看视频| 人妖欧美一区二区| 日韩一级欧美一级| 捆绑调教一区二区三区| 欧美成人性战久久| 久久国产精品99精品国产| 精品国精品国产| 国产乱国产乱300精品| 久久久不卡网国产精品二区 | 在线成人免费视频| 日本亚洲电影天堂| 欧美电影免费观看高清完整版 | 麻豆精品新av中文字幕| 日韩欧美在线123| 国产在线播放一区三区四| 久久久.com| 99精品一区二区三区| 亚洲视频一区二区在线观看| 在线观看亚洲成人| 视频精品一区二区| 日韩免费在线观看| 国产成人av电影在线| 亚洲品质自拍视频| 欧美日本一区二区| 精品亚洲porn| 中文字幕一区二区三区不卡| 日本韩国一区二区三区视频| 亚洲电影一区二区三区| 日韩精品一区二区在线观看| 国产成人亚洲综合a∨婷婷图片 | 国产亚洲精品超碰| 成人av网在线| 日日夜夜免费精品视频| 亚洲精品在线电影| 91一区二区在线| 蜜桃视频一区二区三区在线观看| 久久久国产精华| 欧美性色aⅴ视频一区日韩精品| 久久精品久久精品| 成人欧美一区二区三区1314| 欧美日本高清视频在线观看| 激情综合色播五月| 亚洲人成影院在线观看| 日韩一区二区三区av| 成人午夜电影网站| 午夜精品视频在线观看| 久久久综合激的五月天| 在线观看一区二区精品视频| 精品一区在线看| 一区二区欧美视频| 久久久久国色av免费看影院| 在线免费视频一区二区| 国产一区二区视频在线播放| 亚洲精品日日夜夜| 久久视频一区二区| 欧美色大人视频| 成人涩涩免费视频| 男男gaygay亚洲| 亚洲精品第一国产综合野| 久久嫩草精品久久久精品| 欧美色电影在线| 99久久国产综合精品女不卡| 久久超碰97中文字幕| 亚洲二区视频在线| 亚洲色图一区二区三区| 久久这里只精品最新地址| 精品视频一区三区九区|