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

📄 spooleruserpanel.java

📁 打印管理程序,测试完全通过.windows开发环境.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package jp.co.ntl.swing.ext.spooler;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JSeparator;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableColumn;

import jp.co.ntl.Net;
import jp.co.ntl.NetworkException;
import jp.co.ntl.Page;
import jp.co.ntl.ServerException;
import jp.co.ntl.SpoolerException;
import jp.co.ntl.TimeOutException;
import jp.co.ntl.Util;
import jp.co.ntl.ext.ButtonSelectionEvent;
import jp.co.ntl.ext.ButtonSelectionListener;
import jp.co.ntl.ext.ButtonStateEvent;
import jp.co.ntl.ext.ButtonStateListener;
import jp.co.ntl.spooler.SpoolerInfo;
import jp.co.ntl.preference.PreferenceInfo;
import jp.co.ntl.swing.TableSorter;
import jp.co.ntl.swing.ext.MsgUtil;
import jp.co.ntl.swing.ext.PrinterButtonUtil;
import jp.co.ntl.swing.ext.SimpleButton;
import jp.co.ntl.swing.ext.ImageInfo;
import jp.co.ntl.swing.ext.MultiLineLabel;

public class SpoolerUserPanel extends AbstractSpoolerPanel implements ActionListener, ListSelectionListener, ButtonSelectionListener {
	//private static Logger log = Logger.getLogger(SpoolerUserPanel.class);
	public static final String	COM_REPAINTFRAME			= "RepaintFrame";
	
	private static final String	PANEL_JOB_LIST				= "JobList";
	private static final String	PANEL_DETAIL_INFO			= "DetailInfo";
	private static final String	PANEL_CONFIRM_DELETE		= "ConfirmDelete";
	
	private static final long serialVersionUID = 1L;
	private JTable					tblSpooler;
	private SpoolerTableModel		mdlSpooler;
	private ListSelectionModel 	mdlSpoolerSelect;
	private JScrollPane			scrSpooler;
	private JLabel					lblStatus;
	private JTable					tblDetail;
	private JScrollPane			scrDetail;
//	private JobDetailTableModel	mdlDetail;
	private JobDetailTableModelBase	mdlDetail;
	private SimpleButton			btnClose;
	private JPanel					cardPanel;
	private MultiLineLabel			lblDelete;
	private SimpleButton			btnYes;
	private SimpleButton			btnNo;
	
	private Vector					vcSpoolerInfo;
	private SpoolerInvoker			invoker;
	private TableSorter			sorter;
	
	private int					queType;
	
	private List					lstBtnStateListener;
	private boolean				accessible;
	private SpoolerUtil			su;
	private CardLayout				layout = null;
	private SpoolerInfo			detailSpoolerInfo;
	
	private JPanel					panelJobList;
	private JPanel					panelConfirm;
	private JPanel					panelDetail;
	
// 2007.10.22 lium 暋悢僾儕儞僞懳墳 mod start
	private	PrinterButtonUtil 		prtBtnUtil;
	
	public SpoolerUserPanel(Container parent, Net net, Object keyInfo, int queType, PrinterButtonUtil prtBtnUtil) {
		this.parent = (JFrame)parent;
		commonConstractor(net, false, keyInfo, queType, prtBtnUtil);
	}
	
	public SpoolerUserPanel(JApplet appl, Net net, Object keyInfo, int queType, PrinterButtonUtil prtBtnUtil) {
		this.app = appl;
		commonConstractor(net, false, keyInfo, queType, prtBtnUtil);
	}
	
	private void commonConstractor(Net net, boolean admin, Object keyInfo, int queType, PrinterButtonUtil prtBtnUtil) {
		lstBtnStateListener = new ArrayList();
		this.prtBtnUtil = prtBtnUtil;
		this.queType = queType;
		super.commonConstractor(net, admin, keyInfo);
	}
// 2007.10.22 lium 暋悢僾儕儞僞懳墳 mod end
	
	protected void buildComponents() {
		Resource.load(loc);
		
		setOpaque(false);
		
	    Page.initialize(net);
	    invoker = SpoolerInvoker.getInstance(net);
	
		setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

	    JPanel	panelStatus = new JPanel();
	    panelStatus.setOpaque(false);
	    panelStatus.setLayout(new BoxLayout(panelStatus, BoxLayout.X_AXIS));
	    panelStatus.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
	    
	    lblStatus = new JLabel(Resource.getString(Resource.STATUS));
	    lblStatus.setFont(new Font(null, Font.BOLD, 18));
	    panelStatus.add(lblStatus);
	    panelStatus.add(Box.createHorizontalGlue());
	    add(panelStatus);
	    setStatus(Resource.getString(Resource.STATUS_IDLE));
	    
	    JSeparator separator = new JSeparator();
	    add(separator);
		
		cardPanel = new JPanel();
		layout = new CardLayout();
		cardPanel.setLayout(layout);
		cardPanel.setOpaque(false);
		
		panelJobList = new JPanel();
		panelJobList.setLayout(new BoxLayout(panelJobList, BoxLayout.Y_AXIS));
		panelJobList.setOpaque(false);
		
	    vcSpoolerInfo = new Vector();
	    mdlSpooler = new SpoolerTableModel(admin, vcSpoolerInfo, loc.getLanguage());
	    sorter = new TableSorter(mdlSpooler);
	    tblSpooler = new JTable(sorter);
	    sorter.setTableHeader(tblSpooler.getTableHeader());
	    scrSpooler = new JScrollPane(tblSpooler);
	    tblSpooler.setRowHeight(50);
	    tblSpooler.getTableHeader().setReorderingAllowed(false);
	    tblSpooler.setOpaque(false);
	    scrSpooler.setOpaque(false);
	    
	    TableColumn	column;
	    column = tblSpooler.getColumn(SpoolerTableModel.columnSIZE);
	    column.setPreferredWidth(30);
	    column = tblSpooler.getColumn(SpoolerTableModel.columnCOPY);
	    column.setPreferredWidth(30);
	    column = tblSpooler.getColumn(SpoolerTableModel.columnPAGE);
	    column.setPreferredWidth(30);
	    
	    panelJobList.add(scrSpooler);
	    
	    cardPanel.add(PANEL_JOB_LIST, panelJobList);

	    panelDetail = new JPanel();
	    panelDetail.setLayout(new BoxLayout(panelDetail, BoxLayout.Y_AXIS));
	    panelDetail.setOpaque(false);
	    
//	    vcPaperInfo = new Vector();
//		mdlDetail = new JobDetailTableModel(detailSpoolerInfo, /*vcPaperInfo,*/ loc.getLanguage());
	    detailSpoolerInfo = new SpoolerInfo();
	    if (Util.getPreferenceInfo().getAuthType() == PreferenceInfo.AUTH_LOGIN) {
	    	mdlDetail = new JobDetailLoginTableModel(detailSpoolerInfo, loc.getLanguage());
	    } else {
	    	mdlDetail = new JobDetailTableModel(detailSpoolerInfo, loc.getLanguage());
	    }
		tblDetail = new JTable(mdlDetail);
		scrDetail = new JScrollPane(tblDetail);
		tblDetail.getTableHeader().setReorderingAllowed(false);
		tblDetail.setColumnSelectionAllowed(false);
		tblDetail.setOpaque(false);
		scrDetail.setOpaque(false);
		tblDetail.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		
		column = tblDetail.getColumnModel().getColumn(1);
		column.setPreferredWidth(300);
		
		panelDetail.add(scrDetail);
		
		JPanel	panelButton = new JPanel();
		panelButton.setOpaque(false);
		panelButton.setLayout(new BoxLayout(panelButton, BoxLayout.X_AXIS));
		panelButton.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
		panelButton.add(Box.createHorizontalGlue());
		
		Image[]	img = new Image[] {
				ImageInfo.getImage(ImageInfo.BTN_CLOSE_UP),
				ImageInfo.getImage(ImageInfo.BTN_CLOSE_DOWN),
				ImageInfo.getImage(ImageInfo.BTN_CLOSE_UP)
		};
		
		btnClose = new SimpleButton(img[0], img[1], img[2]);
		btnClose.setOpaque(false);
		panelButton.add(btnClose);
		panelDetail.add(panelButton);
		btnClose.addActionListener(this);
		
		cardPanel.add(PANEL_DETAIL_INFO, panelDetail);
		
		panelConfirm = new JPanel();
		panelConfirm.setLayout(new BoxLayout(panelConfirm, BoxLayout.Y_AXIS));
		panelConfirm.setOpaque(false);
		panelConfirm.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
		
		JPanel	panelDeleteLabel = new JPanel();
		panelDeleteLabel.setLayout(new BorderLayout());
		panelDeleteLabel.setOpaque(false);
		
		lblDelete = new MultiLineLabel("", new Font(null, Font.BOLD, 18), getForeground(), getBackground(), MultiLineLabel.CENTER);
		panelDeleteLabel.add(lblDelete, BorderLayout.CENTER);
		panelConfirm.add(panelDeleteLabel);
		
		panelConfirm.add(Box.createVerticalGlue());
		
		JPanel	panelConfirmButton = new JPanel();
		panelConfirmButton.setOpaque(false);
		panelConfirmButton.setLayout(new BoxLayout(panelConfirmButton, BoxLayout.X_AXIS));
		panelConfirmButton.add(Box.createHorizontalGlue());
		
		img = new Image[] {
				ImageInfo.getImage(ImageInfo.BTN_YES_UP),
				ImageInfo.getImage(ImageInfo.BTN_YES_DOWN),
				ImageInfo.getImage(ImageInfo.BTN_YES_UP),
		};
		btnYes = new SimpleButton(img[0], img[1], img[2]);
		btnYes.setOpaque(false);
		btnYes.addActionListener(this);
	
		img = new Image[] {
				ImageInfo.getImage(ImageInfo.BTN_NO_UP),
				ImageInfo.getImage(ImageInfo.BTN_NO_DOWN),
				ImageInfo.getImage(ImageInfo.BTN_NO_UP)
		};
		btnNo = new SimpleButton(img[0], img[1], img[2]);
		btnNo.setOpaque(false);
		btnNo.addActionListener(this);
				
//		if (GlobalContext.getInstance().getPreferenceInfo().getClientKind() == PreferenceInfo.CLIENT_MAC) {
		if (Util.getPreferenceInfo().getClientKind() == PreferenceInfo.CLIENT_MAC) {
			panelConfirmButton.add(btnNo);
			panelConfirmButton.add(Box.createRigidArea(new Dimension(10, 0)));
			panelConfirmButton.add(btnYes);
		} else {
			panelConfirmButton.add(btnYes);
			panelConfirmButton.add(Box.createRigidArea(new Dimension(10, 0)));
			panelConfirmButton.add(btnNo);
		}
		panelConfirm.add(panelConfirmButton);
		
		cardPanel.add(PANEL_CONFIRM_DELETE, panelConfirm);

	    layout.show(cardPanel, PANEL_JOB_LIST);
	    add(cardPanel);
	    
	    mdlSpoolerSelect = tblSpooler.getSelectionModel();
	    mdlSpoolerSelect.addListSelectionListener(this);
	    mdlSpoolerSelect.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
	    
	    // 2007.10.19 lium 堦妵報嶞儃僞儞捛壛 mod start
	    tblSpooler.setColumnSelectionAllowed(false);
	    su = new SpoolerUtil(this, tblSpooler, sorter, mdlSpooler, invoker);
	    
	    setButtonState();
	    
//	    spoolerThread.setSendEvent(false);
//	    spoolerThread.start();
//	    spoolerThread.addActionListener(this);
	    startGetSpoolerInfoTimer(true, SPOOLERTHREAD_PERIOD);
	    
	    //su = new SpoolerUtil(this, tblSpooler, sorter, mdlSpooler, invoker);
	    // 2007.10.19 lium 堦妵報嶞儃僞儞捛壛 mod end
	}
	
	public void beginPanel(Object info, boolean bInit, String targetPrinterName) throws NetworkException, ServerException, TimeOutException {
		this.targetPrinterName = targetPrinterName;
		this.keyInfo = info;
		if (bInit) {
			this.bInit[queType] = false;
			mdlSpooler.deleteAllInfos();
		}
		start();
	}
	
	public void finalize() throws Throwable {
//		if (spoolerThread != null) {
//			if (spoolerThread.isAlive()) {
//				spoolerThread.setEndThreadFlag(true);
//				spoolerThread.interrupt();
//			}
//			spoolerThread = null;
//		}		
		cancelGetSpoolerInfoTimer();
		
		stop();
		super.finalize();
	}
	
	public boolean start() {
//		if (spoolerThread != null) {
//			spoolerThread.setSendEvent(true);		
		if (isGetSpoolerInfoTimerStarted()) {
			setExecGetSpoolerInfo();			
		    if (!bInit[queType]) {
		    	setStatus(MsgUtil.getMessage(MsgUtil.MSG_GETTING_SPOOL_INFO, null));
		    	super.doRefresh();
		    }
		} else {
//			setStatus(MsgUtil.getMessage(MsgUtil.MSG_GETTING_SPOOL_INFO, null));
//			spoolerThread = new SPSToolThread(SPOOLERTHREAD_PERIOD);
//			spoolerThread.setSendEvent(true);
//			spoolerThread.start();
//			spoolerThread.addActionListener(this);
			startGetSpoolerInfoTimer(false, SPOOLERTHREAD_PERIOD);
		}
		
		setAccessible(true);
		
	    setButtonState();

	    return true;
	}
	
	public void stop() {
//		if (spoolerThread != null) {
//			spoolerThread.setSendEvent(false);
//		}
		setIgnoreGetSpoolerInfo();
		
		if (panelDetail.isShowing() || panelConfirm.isShowing()) {
			closeDialog();
		}
		
		setAccessible(false);
	}
	
	public void endPanel() {
		try {
			finalize();
		} catch (Throwable e) {
		}
	}
	
	// 2007.10.19 lium 堦妵報嶞儃僞儞捛壛 mod start
//	private void setButtonState() {
//		if (panelConfirm.isShowing() || panelDetail.isShowing()) {
//			buttonStateChanged(
//					new int[] {ButtonStateEvent.BTN_PRINT, /*ButtonStateEvent.BTN_CANCEL,*/ ButtonStateEvent.BTN_DELETE, ButtonStateEvent.BTN_DETAIL, ButtonStateEvent.BTN_REFRESH}, 
//					new boolean[] {false, /*false,*/ panelConfirm.isShowing(), panelDetail.isShowing(), false});
//		} else {
//			if (tblSpooler.getSelectedRowCount() == 0) {	
//				buttonStateChanged(
//						new int[] {ButtonStateEvent.BTN_PRINT, /*ButtonStateEvent.BTN_CANCEL,*/ ButtonStateEvent.BTN_DELETE, ButtonStateEvent.BTN_DETAIL, ButtonStateEvent.BTN_REFRESH}, 
//						new boolean[] {false, /*false,*/ false, false, true});
//			} else {
//				boolean	bPrint = false/*, bCancel = false*/;
//			
//				boolean[]	ret = su.checkJobStatus();
//				bPrint = ret[SpoolerUtil.CHECKJOBSTATUS_IDX_RET_PRINT];
/////				bCancel = ret[SpoolerUtil.CHECKJOBSTATUS_IDX_RET_CANCEL];
//	
//				if (tblSpooler.getSelectedRowCount() > 1) {
//					buttonStateChanged(
//							new int[] {ButtonStateEvent.BTN_PRINT, /*ButtonStateEvent.BTN_CANCEL,*/ ButtonStateEvent.BTN_DELETE, ButtonStateEvent.BTN_DETAIL, ButtonStateEvent.BTN_REFRESH}, 
//							new boolean[] {false, /*bCancel,*/ true, false, true});
//				} else {
//					buttonStateChanged(
//							new int[] {ButtonStateEvent.BTN_PRINT, /*ButtonStateEvent.BTN_CANCEL,*/ ButtonStateEvent.BTN_DELETE, ButtonStateEvent.BTN_DETAIL, ButtonStateEvent.BTN_REFRESH}, 
//							new boolean[] {bPrint, /*bCancel,*/ true, true, true});
//				}
//			}
//		}
//	}
	private void setButtonState() {
		if (panelConfirm.isShowing() || panelDetail.isShowing()) {
			buttonStateChanged(
					new int[] {ButtonStateEvent.BTN_PRINT, 
								ButtonStateEvent.BTN_PRINTALL, 
								ButtonStateEvent.BTN_DELETE, 
								ButtonStateEvent.BTN_DETAIL, 
								ButtonStateEvent.BTN_REFRESH,
								ButtonStateEvent.BTN_HEAD_1,
								ButtonStateEvent.BTN_HEAD_2,
								ButtonStateEvent.BTN_HEAD_3,
								ButtonStateEvent.BTN_HEAD_4,
								ButtonStateEvent.BTN_HEAD_5
					}, 
					new boolean[] {false, 
								false,
								panelConfirm.isShowing(), 
								panelDetail.isShowing(), 
								false
								,false, false, false, false, false
					});
		} else {
			// 報嶞壜偺僕儑僽偑偁傞応崌丄true傪栠傞
			boolean bPrintAll = su.hasPrintableJob();

			if (tblSpooler.getSelectedRowCount() == 0) {	
				buttonStateChanged(
						new int[] {ButtonStateEvent.BTN_PRINT, 
								ButtonStateEvent.BTN_PRINTALL, 
								ButtonStateEvent.BTN_DELETE, 
								ButtonStateEvent.BTN_DETAIL, 
								ButtonStateEvent.BTN_REFRESH,
								
								ButtonStateEvent.BTN_HEAD_1,
								ButtonStateEvent.BTN_HEAD_2,
								ButtonStateEvent.BTN_HEAD_3,
								ButtonStateEvent.BTN_HEAD_4,
								ButtonStateEvent.BTN_HEAD_5
								}, 
						new boolean[] {false, bPrintAll, false, false, true
									 	,true, true, true, true, true
						});
			} else {
				boolean	bPrint = false;				

				boolean[]	ret = su.checkJobStatus();
				bPrint = ret[SpoolerUtil.CHECKJOBSTATUS_IDX_RET_PRINT];
				
				if (tblSpooler.getSelectedRowCount() > 1) {

⌨️ 快捷键说明

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