package com.vci.client.auth2.view; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.List; import javax.swing.JDialog; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.decorator.HighlighterFactory; import com.vci.client.omd.provider.BtmProvider; import com.vci.client.oq.ui.QResultTableModel; import com.vci.corba.omd.data.AttributeValue; import com.vci.corba.omd.data.BusinessObject; import com.vci.corba.omd.data.LinkObject; public class QueryDialog extends JDialog { /** * */ private static final long serialVersionUID = 9126978154035466868L; private JXTable qrTable; private DefaultTableModel tableModel; private JPanel northPanel; private JPanel centerPanel; private JPanel southPanel; private JScrollPane scrollPane; private BusinessObject[] boResult; private boolean boFlag = false; private LinkObject[] loResult; private boolean loFlag = false; private List clauseList; private final int TABLE_HEADER_HEIGHT = 25; private final int ROW_HEIGHT = 30; public QueryDialog(BusinessObject[] boResult, List clauseList) { this.boResult = boResult; this.boFlag = true; if (boResult == null || boResult.length == 0) { JOptionPane.showMessageDialog( com.vci.client.LogonApplication.frame, "没有业务对象", "提示", JOptionPane.INFORMATION_MESSAGE); return; } String btmName = boResult[0].btName; // List columns = // if (clauseList.contains("*")) { // clauseList = new ArrayList(); // clauseList.add("OID"); // clauseList.add("REVISIONOID"); // clauseList.add("NAMEOID"); // clauseList.add("BTMNAME"); // clauseList.add("Creator"); // } this.clauseList = BtmProvider.getInstance().getAllAbNames(btmName); ; initUI(); initTable(); initListener(); } public QueryDialog(LinkObject[] ltResult, List clauseList) { this.loResult = ltResult; this.loFlag = true; this.clauseList = clauseList; initUI(); initTable(); initListener(); } private void initUI() { this.setTitle("业务对象列表"); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setSize(screenSize.width, screenSize.height / 2); this.setModal(true); this.setLocationRelativeTo(null); this.setResizable(true); this.setLayout(new BorderLayout(0, 0)); northPanel = new JPanel(); centerPanel = new JPanel(); southPanel = new JPanel(); this.add(northPanel, BorderLayout.NORTH); this.add(centerPanel, BorderLayout.CENTER); this.add(southPanel, BorderLayout.SOUTH); centerPanel.setLayout(new BorderLayout(5, 5)); scrollPane = new JScrollPane(); centerPanel.add(scrollPane, BorderLayout.CENTER); tableModel = new QResultTableModel(); qrTable = new JXTable(tableModel); qrTable.setRowHeight(ROW_HEIGHT); qrTable.setHorizontalScrollEnabled(true); qrTable.setHighlighters(HighlighterFactory.createAlternateStriping()); qrTable.setSortable(true); JTableHeader tableHeader = qrTable.getTableHeader(); Dimension size = tableHeader.getPreferredSize(); size.height = TABLE_HEADER_HEIGHT; tableHeader.setPreferredSize(size); scrollPane.setViewportView(qrTable); } private void initTable() { qrTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); setMaxTableHeader(); qrTable.removeAll(); tableModel.setColumnCount(clauseList.size()); tableModel.setColumnIdentifiers(clauseList.toArray(new String[0])); if (boFlag) { tableModel.setRowCount(boResult.length); qrTable.setEditable(true); for (int i = 0; i < boResult.length; i++) { BusinessObject bo = boResult[i]; AttributeValue[] attList = bo.hisAttrValList; for (int j = 0; j < clauseList.size(); j++) { qrTable.setValueAt(attList[j].attrVal, i, j); } } qrTable.setEditable(false); } else if (loFlag) { tableModel.setRowCount(loResult.length); qrTable.setEditable(true); for (int i = 0; i < loResult.length; i++) { LinkObject lo = loResult[i]; AttributeValue[] attList = lo.hisAttrValList; for (int j = 0; j < attList.length; j++) { qrTable.setValueAt(attList[j], i, j); } } qrTable.setEditable(false); } qrTable.updateUI(); } private void setMaxTableHeader() { TableColumnModel columnModel = qrTable.getColumnModel(); double maxWidth = 0; for (int i = 0; i < columnModel.getColumnCount(); i++) { TableColumn column = columnModel.getColumn(i); TableCellRenderer cellRenderer = column.getHeaderRenderer(); if (cellRenderer == null) cellRenderer = qrTable.getDefaultRenderer(columnModel .getColumn(i).getClass()); Object headerValue = column.getHeaderValue(); Component columnComp = cellRenderer.getTableCellRendererComponent( (JTable) qrTable, headerValue, false, false, 0, i); maxWidth = Math.max(maxWidth, columnComp.getPreferredSize() .getWidth()); } JTableHeader jtableHeader = qrTable.getTableHeader(); Dimension size = jtableHeader.getPreferredSize(); size.width = (int) maxWidth + 20; jtableHeader.setPreferredSize(size); } private QueryDialog getDialog() { return this; } private CheckRightResultView uiContainer; public CheckRightResultView getUiContainer() { return uiContainer; } public void setUiContainer(CheckRightResultView uiContainer) { this.uiContainer = uiContainer; } private void initListener() { qrTable.addMouseListener(new MouseListener() { @Override public void mouseReleased(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { JTable source = (JTable) e.getSource(); int row = source.getSelectedRow(); if (row == -1) return; DefaultTableModel queryModel = (DefaultTableModel) source .getModel(); String value = (String) queryModel.getValueAt(row, queryModel.findColumn("OID")); getUiContainer().getObjectTextField().setText(value); getDialog().dispose(); } }); } }