public void actionPerformed(ActionEvent e) {

				String com = e.getActionCommand();
				
				if (com.equals("search")) {
					// TODO
					CommonUtil.openBrowser(Constant.ExternalUrl.SHOW_PACKAGE_VIEW_SEARCH_PAGE);
					
//					// URLパラメータ生成
//					StringBuffer urlParam = new StringBuffer();
//					
//					String typeName = MassBankCommon.CGI_TBL[MassBankCommon.CGI_TBL_NUM_TYPE][MassBankCommon.CGI_TBL_TYPE_PEAK];
//					
//					urlParam.append("?type=" + typeName);							// type：peak
//					urlParam.append("&num=" + specData.getSelectedPeakNum());		// num ：
//					urlParam.append("&tol=0");										// tol ：0
//					urlParam.append("&int=5");										// int ：5
//					
//					int index = 0;
//					Iterator<Double> ite = specData.getSelectedPeakList().iterator();
//					while (ite.hasNext()) {
//						if (index != 0) {
//							urlParam.append("&op"+ index +"=and");					// op  ：and
//						} else {
//							urlParam.append("&op"+ index +"=or");					// op  ：or
//						}
//						urlParam.append("&mz"+ index +"=" + String.valueOf(ite.next()));	// mz  ：
//						index++;
//					}
//					urlParam.append("&sortKey=name&sortAction=1&pageNo=1&exec=&inst=all");
//					
//					// JSP呼び出し
//					String reqUrl = SearchPage.baseUrl + "jsp/Result.jsp" + urlParam.toString();
//			        LOGGER.info("open browser with" + reqUrl);
//			        try {
//			          Desktop.getDesktop().browse(new URI(reqUrl));
//			        } catch (IOException | URISyntaxException ex) {
//			          LOGGER.error(ex.getMessage(),ex);
//			        }
				}
				else if (com.equals("reset")) {
					specData.clearSelectedPeakList();
					specData.initAllSelectedPeak();
					setStatusLabel();
					PackageViewPanel.this.repaint();
				}
			}
		}
	}
	
	/**
	 * ボタンペイン
	 * PackageViewPanelのインナークラス
	 */
	class ButtonPane extends JPanel implements MouseListener, MouseMotionListener {

		private boolean isInMZ = false;					// show all m/zボタンカーソルインフラグ
		private boolean isInMZMatch = false;				// show match m/zボタンカーソルインフラグ
		private boolean isInChgColor = false;				// change colorボタンカーソルインフラグ
		private boolean isInFlat = false;					// flatボタンカーソルインフラグ
		private boolean isMZState = false;				// イベント前show all m/zボタン状態
		private boolean isMZMatchState = false;			// イベント前show match m/zボタン状態
		private boolean isChgColorState = false;			// イベント前change colorボタン状態
		private boolean isFlatState = false;				// イベント前flatボタン状態
		
		/**
		 * コンストラクタ
		 */
		public ButtonPane() {
			
			// レイアウト指定
			setLayout(new FlowLayout());
			
			leftMostBtn = new JButton("<<");
			leftMostBtn.setName("<<");
			leftMostBtn.addMouseListener(this);
			leftMostBtn.setMargin(new Insets(0, 0, 0, 0));
			
			leftBtn = new JButton(" < ");
			leftBtn.setName("<");
			leftBtn.addMouseListener(this);
			leftBtn.setMargin(new Insets(0, 0, 0, 0));

			rightBtn = new JButton(" > ");
			rightBtn.setName(">");
			rightBtn.addMouseListener(this);
			rightBtn.setMargin(new Insets(0, 0, 0, 0));

			rightMostBtn = new JButton(">>");
			rightMostBtn.setName(">>");
			rightMostBtn.addMouseListener(this);
			rightMostBtn.setMargin(new Insets(0, 0, 0, 0));

			if (!isInitRate) {
				leftMostBtn.setEnabled(true);
				leftBtn.setEnabled(true);
				rightBtn.setEnabled(true);
				rightMostBtn.setEnabled(true);
			}
			else {
				leftMostBtn.setEnabled(false);
				leftBtn.setEnabled(false);
				rightBtn.setEnabled(false);
				rightMostBtn.setEnabled(false);
			}
			
			mzDisp = new JToggleButton("show all m/z");
			mzDisp.setName("mz");
			mzDisp.addMouseListener(this);
			mzDisp.addMouseMotionListener(this);
			mzDisp.setMargin(new Insets(0, 0, 0, 0));
			mzDisp.setSelected(false);

			mzMatchDisp = new JToggleButton("show match m/z");
			mzMatchDisp.setName("match");
			mzMatchDisp.addMouseListener(this);
			mzMatchDisp.addMouseMotionListener(this);
			mzMatchDisp.setMargin(new Insets(0, 0, 0, 0));
			mzMatchDisp.setSelected(false);
			
			chgColor = new JToggleButton("change color");
			chgColor.setName("chgColor");
			chgColor.addMouseListener(this);
			chgColor.addMouseMotionListener(this);
			chgColor.setMargin(new Insets(0, 0, 0, 0));
			chgColor.setSelected(false);
			
			// レイアウト調整用ブランクラベル
			JLabel blankLabel1 = new JLabel("   ");
			
			xAxisUp = new JButton("←");
			xAxisUp.setName("xup");
			xAxisUp.addMouseListener(this);
			xAxisUp.addMouseMotionListener(this);
			xAxisUp.setMargin(new Insets(0, 0, 0, 0));
			
			xAxisDown = new JButton("→");
			xAxisDown.setName("xdown");
			xAxisDown.addMouseListener(this);
			xAxisDown.addMouseMotionListener(this);
			xAxisDown.setMargin(new Insets(0, 0, 0, 0));
			
			yAxisUp = new JButton("↑");
			yAxisUp.setName("yup");
			yAxisUp.addMouseListener(this);
			yAxisUp.addMouseMotionListener(this);
			yAxisUp.setMargin(new Insets(0, 0, 0, 0));
			
			yAxisDown = new JButton("↓");
			yAxisDown.setName("ydown");
			yAxisDown.addMouseListener(this);
			yAxisDown.addMouseMotionListener(this);
			yAxisDown.setMargin(new Insets(0, 0, 0, 0));
			
			topAngleBtn = new JButton("top angle");
			topAngleBtn.setName("top");
			topAngleBtn.addMouseListener(this);
			topAngleBtn.setMargin(new Insets(0,0,0,0));
			
			sideAngleBtn = new JButton("side angle");
			sideAngleBtn.setName("side");
			sideAngleBtn.addMouseListener(this);
			sideAngleBtn.setMargin(new Insets(0,0,0,0));
			
			flat = new JToggleButton("flat");
			flat.setName("flat");
			flat.addMouseListener(this);
			flat.addMouseMotionListener(this);
			flat.setMargin(new Insets(0, 0, 0, 0));
			flat.setSelected(false);
			
			add(leftMostBtn);
			add(leftBtn);
			add(rightBtn);
			add(rightMostBtn);
			add(mzDisp);
			add(mzMatchDisp);
			add(chgColor);
			add(blankLabel1);
			add(xAxisUp);
			add(xAxisDown);
			add(yAxisUp);
			add(yAxisDown);
			add(topAngleBtn);
			add(sideAngleBtn);
			add(flat);
		}
		
		
		/**
		 * マウスクリックイベント
		 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
		 */
		public void mouseClicked(MouseEvent e) {
			
			String btnName = e.getComponent().getName();
			
			if (!e.getComponent().isEnabled()) {
				return;
			}
			else if (animationTimer != null && animationTimer.isRunning()) {
				return;
			}
			
			// 左ボタンの場合
			if ( SwingUtilities.isLeftMouseButton(e) ) {
				
				if (btnName.equals("<<")) {
					massStart = Math.max(0, massStart - massRange);
					PackageViewPanel.this.repaint();
				}
				else if (btnName.equals("<")) {
					massStart = Math.max(0, massStart - massRange / 4);
					PackageViewPanel.this.repaint();
				}
				else if (btnName.equals(">")) {
					massStart = Math.min(massRangeMax - massRange, massStart + massRange / 4);
					PackageViewPanel.this.repaint();
				}
				else if (btnName.equals(">>")) {
					massStart = Math.min(massRangeMax - massRange, massStart + massRange);
					PackageViewPanel.this.repaint();
				}
				else if (btnName.equals("top")) {
					if (moveXPoint != minMoveXPoint || moveYPoint != maxMoveYPoint) {
						allBtnCtrl(false);
						// マウスカーソル設定
						PackageViewPanel.this.setCursor(new Cursor(Cursor.WAIT_CURSOR));
						moveTimer = new Timer(10,
								  new MoveAnimationTimer(btnName));
						moveTimer.start();
					}
				}
				else if (btnName.equals("side")) {
					if (moveXPoint != minMoveXPoint || moveYPoint != minMoveYPoint) {
						allBtnCtrl(false);
						// マウスカーソル設定
						PackageViewPanel.this.setCursor(new Cursor(Cursor.WAIT_CURSOR));
						moveTimer = new Timer(10,
								  new MoveAnimationTimer(btnName));
						moveTimer.start();
					}
				}
			}
		}

		/**
		 * マウスプレスイベント
		 * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
		 */
		public void mousePressed(MouseEvent e) {
			
			String btnName = e.getComponent().getName();
			
			if (!e.getComponent().isEnabled()) {
				return;
			}
			else if (animationTimer != null && animationTimer.isRunning()) {
				// ボタン押下前状態を保持
				isMZState = mzDisp.isSelected();
				isMZMatchState = mzMatchDisp.isSelected();
				isChgColorState = chgColor.isSelected();
				isFlatState = flat.isSelected();
				return;
			}
			
			// PlotPaneカーソルポイント初期化
			cursorPoint = new Point();
			
			// 左ボタンの場合
			if ( SwingUtilities.isLeftMouseButton(e) ) {
				
				int time = 10;
				
				// コントロールキーが同時に押下されている場合は、動作を遅くする
				if (e.isControlDown()) {
					time = 70;
				}
				
				if (btnName.equals("xup")
						|| btnName.equals("xdown")
						|| btnName.equals("yup")
						|| btnName.equals("ydown")) {
					
					moveTimer = new Timer(time,
							  new MoveAnimationTimer(btnName));
					moveTimer.start();
				}
			}
		}

		/**
		 * マウスリリースイベント
		 * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
		 */
		public void mouseReleased(MouseEvent e) {
			
			String btnName = e.getComponent().getName();
			
			if (!e.getComponent().isEnabled()) {
				return;
			}
			else if (animationTimer != null && animationTimer.isRunning()) {
				// ボタン押下前状態に戻す
				if (btnName.equals("mz")) {
					mzDisp.setSelected(isMZState);
				}
				else if (btnName.equals("match")) {
					mzMatchDisp.setSelected(isMZMatchState);
				}
				else if (btnName.equals("chgColor")) {
					chgColor.setSelected(isChgColorState);
				}
				else if (btnName.equals("flat")) {
					flat.setSelected(isFlatState);
				}
				return;
			}
			
			
			// 左ボタンの場合
			if ( SwingUtilities.isLeftMouseButton(e) ) {
				
				if (btnName.equals("mz")) {
					if (isInMZ) {
						mzMatchDisp.setSelected(false);
						PackageViewPanel.this.repaint();
					}
				}
				else if (btnName.equals("match")) {
					if (isInMZMatch) {
						mzDisp.setSelected(false);
						PackageViewPanel.this.repaint();
					}
				}
				else if (btnName.equals("chgColor")) {
					if (isInChgColor) {
						PackageViewPanel.this.repaint();
					}
				}
				else if (btnName.equals("flat")) {
					if (isInFlat) {
						
						// flatボタン状態取得
						if (flat.isSelected()) {
							if (tmpMoveXPoint == -1 && tmpMoveYPoint == -1) {
								// 現在のx軸、y軸可動値を退避
								tmpMoveXPoint = moveXPoint;
								tmpMoveYPoint = moveYPoint;
							}
						}
						
						allBtnCtrl(false);
						// マウスカーソル設定
						PackageViewPanel.this.setCursor(new Cursor(Cursor.WAIT_CURSOR));
						moveTimer = new Timer(10,
								  new MoveAnimationTimer(btnName));
						moveTimer.start();
					}
				}
				else if (btnName.equals("xup")
						|| btnName.equals("xdown")
						|| btnName.equals("yup")
						|| btnName.equals("ydown")) {
					
					if (moveTimer != null && moveTimer.isRunning()) {
						moveTimer.stop();
					}
				}
			}
		}

		/**
		 * マウスエンターイベント
		 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
		 */
		public void mouseEntered(MouseEvent e) {
			
			String btnName = e.getComponent().getName();
			
			if (!e.getComponent().isEnabled()) {
				return;
			}
			else if (animationTimer != null && animationTimer.isRunning()) {
				return;
			}
			
			if (btnName.equals("mz")) {
				isInMZ = true;
			}
			else if (btnName.equals("match")) {
				isInMZMatch = true;
			}
			else if (btnName.equals("chgColor")) {
				isInChgColor = true;
			}
			else if (btnName.equals("flat")) {
				isInFlat = true;
			}
		}

		/**
		 * マウスイグジットイベント
		 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
		 */
		public void mouseExited(MouseEvent e) {
			
			String btnName = e.getComponent().getName();
			
			if (!e.getComponent().isEnabled()) {
				return;
			}
			else if (animationTimer != null && animationTimer.isRunning()) {
				return;
			}
			
			if (btnName.equals("mz")) {
				isInMZ = false;
			}
			else if (btnName.equals("match")) {
				isInMZMatch = false;
			}
			else if (btnName.equals("chgColor")) {
				isInChgColor = false;
			}
			else if (btnName.equals("flat")) {
				isInFlat = false;
			}
		}

		/**
		 * マウスドラッグイベント
		 * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
		 */
		public void mouseDragged(MouseEvent e) {
		}

		/**
		 * マウスムーブイベント
		 * @see java.awt.event.MouseMotionListener#mouseClicked(java.awt.event.MouseEvent)
		 */
		public void mouseMoved(MouseEvent e) {
		}
		
		
		/**
		 * グラフ可動をアニメーション化するクラス
		 * FunctionPain2のインナークラス
		 */
		class MoveAnimationTimer implements ActionListener {

			private String btnName = "";				// ボタン名
			
			private int moveXNum = 1;					// x軸の一度に稼動する値
			private int moveYNum = 1;					// y軸の一度に稼動する値
			
			/**
			 * コンストラクタ
			 * @param btnName ボタン名
			 */
			public MoveAnimationTimer(String btnName) {
				this.btnName = btnName;
				moveXNum = (((int)maxMoveXPoint / 90) > 0) ? ((int)maxMoveXPoint / 90) : 1;
				moveYNum = (((int)maxMoveYPoint / 70) > 0) ? ((int)maxMoveYPoint / 70) : 1;
			}

			/**
			 * アクションイベント
			 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
			 */
			public void actionPerformed(ActionEvent e) {
				
				if (btnName.equals("xup")) {
					if (moveXPoint < maxMoveXPoint) {
						moveXPoint += moveXNum;
						moveXPoint = (moveXPoint > maxMoveXPoint) ? maxMoveXPoint : moveXPoint;
					}
					else {
						moveTimer.stop();
					}
				}
				else if (btnName.equals("xdown")) {
					if (moveXPoint > minMoveXPoint) {
						moveXPoint -= moveXNum;
						moveXPoint = (moveXPoint < minMoveXPoint) ? minMoveXPoint : moveXPoint;
					}
					else {
						moveTimer.stop();
					}
				}
				else if (btnName.equals("yup")) {
					if (moveYPoint < maxMoveYPoint) {
						moveYPoint += moveYNum;
						moveYPoint = (moveYPoint > maxMoveYPoint) ? maxMoveYPoint : moveYPoint;
					}
					else {
						moveTimer.stop();
					}
				}
				else if (btnName.equals("ydown")) {
					if (moveYPoint > minMoveYPoint) {
						moveYPoint -= moveYNum;
						moveYPoint = (moveYPoint < minMoveYPoint) ? minMoveYPoint : moveYPoint;
					}
					else {
						moveTimer.stop();
					}
				}
				else if (btnName.equals("top")) {
					
					boolean isMovedX = false;
					boolean isMovedY = false;
					if (moveXPoint > minMoveXPoint) {
						moveXPoint -= moveXNum;
						moveXPoint = (moveXPoint < minMoveXPoint) ? minMoveXPoint : moveXPoint;
					}
					else {
						isMovedX = true;
					}
					
					if (moveYPoint < maxMoveYPoint) {
						moveYPoint += moveYNum;
						moveYPoint = (moveYPoint > maxMoveYPoint) ? maxMoveYPoint : moveYPoint;
					}
					else {
						isMovedY = true;
					}
					
					if (isMovedX && isMovedY) {
						moveTimer.stop();
						// マウスカーソル設定
						PackageViewPanel.this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
						allBtnCtrl(true);
					}
				}
				else if (btnName.equals("side")) {
					
					boolean isMovedX = false;
					boolean isMovedY = false;
					if (moveXPoint > minMoveXPoint) {
						moveXPoint -= moveXNum;
						moveXPoint = (moveXPoint < minMoveXPoint) ? minMoveXPoint : moveXPoint;
					}
					else {
						isMovedX = true;
					}
					
					if (moveYPoint > minMoveYPoint) {
						moveYPoint -= moveYNum;
						moveYPoint = (moveYPoint < minMoveYPoint) ? minMoveYPoint : moveYPoint;
					}
					else {
						isMovedY = true;
					}
					
					if (isMovedX && isMovedY) {
						moveTimer.stop();
						// マウスカーソル設定
						PackageViewPanel.this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
						allBtnCtrl(true);
					}
				}
				else if (btnName.equals("flat")) {
					
					boolean isMovedX = false;
					boolean isMovedY = false;
					
					if (flat.isSelected()) {
						
						if (moveXPoint > 0) {
							moveXPoint -= moveXNum;
							moveXPoint = (moveXPoint < 0) ? 0 : moveXPoint;
						}
						else {
							isMovedX = true;
						}
						
						if (moveYPoint > 0) {
							moveYPoint -= moveYNum;
							moveYPoint = (moveYPoint < 0) ? 0 : moveYPoint;
						}
						else {
							isMovedY = true;
						}
						
						if (isMovedX && isMovedY) {
							moveTimer.stop();
							// マウスカーソル設定
							PackageViewPanel.this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
							allBtnCtrl(true);
							
							// 各グラフ可動ボタンの制御
							xAxisDown.setEnabled(false);
							xAxisUp.setEnabled(false);
							yAxisDown.setEnabled(false);
							yAxisUp.setEnabled(false);
							topAngleBtn.setEnabled(false);
							sideAngleBtn.setEnabled(false);
						}
					}
					else {
						
						if (moveXPoint < tmpMoveXPoint) {
							moveXPoint += moveXNum;
							moveXPoint = (moveXPoint > tmpMoveXPoint) ? tmpMoveXPoint : moveXPoint;
						}
						else {
							isMovedX = true;
						}
						
						if (moveYPoint < tmpMoveYPoint) {
							moveYPoint += moveYNum;
							moveYPoint = (moveYPoint > tmpMoveYPoint) ? tmpMoveYPoint : moveYPoint;
						}
						else {
							isMovedY = true;
						}
						
						if (isMovedX && isMovedY) {
							moveTimer.stop();
							// マウスカーソル設定
							PackageViewPanel.this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
							allBtnCtrl(true);
							
							tmpMoveXPoint = -1;
							tmpMoveYPoint = -1;
						}
					}
				}
				PackageViewPanel.this.repaint();
			}
		}
	}

	/**
	 * テーブルリストセレクトリスナークラス
	 * PackageViewPanelのインナークラス
	 */
	class LmSelectionListener implements ListSelectionListener {

		/**
		 * バリューチェンジイベント
		 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
		 */
		public void valueChanged(ListSelectionEvent e) {
			if (e.getValueIsAdjusting()) {
				return;
			}
			
			// 選択行を可視にするためスクロールバー位置設定
			int selRow = recTable.getSelectedRow();
			int selCol = recTable.getSelectedColumn();
			Rectangle cellRect = recTable.getCellRect(selRow, selCol, false	);
			if(cellRect != null) {
				recTable.scrollRectToVisible( cellRect );
			}
			
			PackageViewPanel.this.repaint();
		}
	}
	
	/**
	 * テーブルマウスリスナークラス
	 * PackageViewPanelのインナークラス
	 */
	class TblMouseListener extends MouseAdapter {
		
		@Override
		public void mouseClicked(MouseEvent e) {
			super.mouseClicked(e);
			
			if (!SwingUtilities.isLeftMouseButton(e)) {
				return;
			}
			
			Point p = e.getPoint();
			int selRow = recTable.rowAtPoint(p);
			int selCol = recTable.columnAtPoint(p);
			
			if (selRow == -1 || selCol == -1) {
				return;
			}
			
			// チェックボックスの選択処理
			int disableCol = recTable.getColumnModel().getColumnIndex(SearchPage.COL_LABEL_DISABLE);
			if (selCol == disableCol) {
				recTable.setValueAt(
						!Boolean.parseBoolean(String.valueOf(recTable.getValueAt(selRow, disableCol))),
						selRow, 
						disableCol);
				return;
			}
			
			// レコードページ表示処理
			if (e.getClickCount() == 2) {
				int siteCol = recTable.getColumnModel().getColumnIndex(SearchPage.COL_LABEL_CONTRIBUTOR);
				if (String.valueOf(recTable.getValueAt(selRow, siteCol)).equals("")) {
					return;
				}
				
				showRecordPage(selRow);
			}
		}

		@Override
		public void mousePressed(MouseEvent e) {
			super.mousePressed(e);
			
			if (SwingUtilities.isRightMouseButton(e)) {
				isDragCancel = true;
				dragRowIndex = -1;
				PackageViewPanel.this.setCursor(Cursor.getDefaultCursor());
				recTable.repaint();
				return;
			}
			if (!SwingUtilities.isLeftMouseButton(e)) {
				return;
			}
			
			isDragCancel = false;
			
			Point p = e.getPoint();
			pressRowIndex = recTable.rowAtPoint(p);
			PackageViewPanel.this.repaint();
		}
		
		@Override
		public void mouseReleased(MouseEvent e) {
			super.mouseReleased(e);
			
			// 右リリースの場合
			if (SwingUtilities.isRightMouseButton(e)) {
				recListPopup(e);
			}
			
			if (!SwingUtilities.isLeftMouseButton(e)) {
				return;
			}
			if (isDragCancel) {
				return;
			}
			
			dragRowIndex = -1;
			
			Point p = e.getPoint();
		    releaseRowIndex = recTable.rowAtPoint(p);
			
			if (!isSortStatus() && pressRowIndex != releaseRowIndex && releaseRowIndex != -1) {
				// レコードドロップ(移動)
				DefaultTableModel dataModel = (DefaultTableModel)recSorter.getTableModel();
				dataModel.moveRow(pressRowIndex, pressRowIndex, releaseRowIndex);
				recTable.setRowSelectionInterval(releaseRowIndex, releaseRowIndex);
				
				// データクラスソート
				specData.sortRecInfo(recTable);
			}
			recTable.repaint();
			setCursor(Cursor.getDefaultCursor());
		}
	}
	
	/**
	 * テーブルマウスモーションリスナークラス
	 * PackageViewPanelのインナークラス
	 */
	class TblMouseMotionListener extends MouseMotionAdapter {
		
		@Override
		public void mouseDragged(MouseEvent e) {
			super.mouseDragged(e);
			
			if (!SwingUtilities.isLeftMouseButton(e)) {
				return;
			}
			if (isDragCancel) {
				recTable.setRowSelectionInterval(pressRowIndex, pressRowIndex);
				return;
			}
			
			Point p = e.getPoint();
			dragRowIndex = recTable.rowAtPoint(p);
			
			// カーソル変更
			Cursor cursor = Cursor.getDefaultCursor();
			if ( !isSortStatus()  && pressRowIndex != dragRowIndex) {
				try {
					cursor = Cursor.getSystemCustomCursor("MoveDrop.32x32");
				} catch (Exception ex) {
					// ドロップ用システムカーソルが存在しない場合、カーソル変更なし
				}
			}
			else {
				try {
					cursor = Cursor.getSystemCustomCursor("MoveNoDrop.32x32");
				} catch (Exception ex) {
					// ドロップ不可用システムカーソルが存在しない場合、カーソル変更なし
				}				
			}
			PackageViewPanel.this.setCursor(cursor);
			
			// ドラッグ中は選択行を移動しない
			recTable.setRowSelectionInterval(pressRowIndex, pressRowIndex);
			recTable.repaint();
		}
	}
	
	/**
	 * テーブルキーリスナークラス
	 * PackageViewPanelのインナークラス
	 */
	class TblKeyListener extends KeyAdapter {
		
		@Override
		public void keyReleased(KeyEvent e) {
			super.keyReleased(e);
			
			// ESCキープレスでドラッグイベント解除
			if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
				isDragCancel = true;
				dragRowIndex = -1;
				PackageViewPanel.this.setCursor(Cursor.getDefaultCursor());
				recTable.repaint();
			}
		}
	}
	
	/**
	 * テーブルレンダラー
	 * PackageViewPanelのインナークラス
	 * オリジナルレンダラー。
	 */
	class TblRenderer extends DefaultTableCellRenderer {
		
		@Override
		public Component getTableCellRendererComponent(JTable table, Object value,
				boolean isSelected, boolean hasFocus, int row, int column) {
			
			super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
			
			if(isSelected) {
				setForeground(table.getSelectionForeground());
				setBackground(table.getSelectionBackground());
			}else{
				setForeground(table.getForeground());
				setBackground(table.getBackground());
			}
			
			// 非表示レコードの文字色変更
			int disableCol = recTable.getColumnModel().getColumnIndex(SearchPage.COL_LABEL_DISABLE);
			if (Boolean.parseBoolean(String.valueOf(recTable.getValueAt(row, disableCol)))) {
				if (isSelected) {
					setForeground(Color.GRAY);
				}
				else {
					setForeground(Color.LIGHT_GRAY);	
				}
			}
			
			if (value instanceof Boolean) {
				if (column == disableCol) {
					// チェックボックス返却
					JCheckBox obj = new JCheckBox(null, null, ((Boolean)table
							.getValueAt(row, column)).booleanValue());
					if (isSelected) {
						obj.setBackground(table.getSelectionBackground());
					} else {
						obj.setBackground(table.getBackground());
					}
					obj.setHorizontalAlignment(CENTER);
					return obj;
				}
			}
			return this;
		}
	}
	
	/**
	 * ペインマウスリスナー
	 * PackageViewPanelのインナークラス
	 */
	class PaneMouseListener extends MouseAdapter {
		
		@Override
		public void mouseReleased(MouseEvent e) {
			super.mouseReleased(e);
			
			// 右リリースの場合
			if (SwingUtilities.isRightMouseButton(e)) {
				recListPopup(e);
			}