MiniTable 可单选/取消单选.

来源:互联网 发布:国云数据科技有限公司 编辑:程序博客网 时间:2024/05/16 17:18
一、 有潜在BUG,需要等待时间才能看到效果
minitable.setMultiSelection(true);//minitable.getTableHeader().setReorderingAllowed(false);minitable.getTableHeader().setResizingAllowed(false);private int Index_Carton_ID;private int m_CarRow1 = -1;private int m_CarRow2 = -1;//------------------------------methodspublic void tableChanged(TableModelEvent e) {int row = 0;int col = 0;int editRow = 0;int editCol = e.getColumn();boolean isCartonsTable = (e.getSource().equals(minitable.getModel()));if (isCartonsTable) {row = minitable.getRowCount();col = minitable.getColumnCount();editRow = minitable.getEditingRow();if (editRow < 0 || editCol < 0) {return;}}// if minitable change and eiditing Column be zero.if(isCartonsTable && row > 0 && editCol == 0){TableModel tableModel = miniTable.getModel();// for minitable,Row set not selected.  for (int i = 0; i < minitable.getRowCount(); i++) {((IDColumn) tableModel.getValueAt(i, Index_Carton_ID)).setSelected(false);} // IDColumn ids = (IDColumn) tableModel.getValueAt(editRow, Index_Carton_ID);if (m_CarRow1 == editRow && m_CarRow2 != editRow) {ids.setSelected(false);m_CarRow2 = editRow;} else {ids.setSelected(true);m_CarRow2 = -1;} }}


二、 使用Boolean类型为第一列测试技术为Compiere/ADempiere

效果根据Parameter Apanel 输入的参数查询Header Apanel 数据。

然后选择 Header Apanel 中的一行 查询出 Lines Apanel

且显示出 所选择的Header Apanel 数据的  Currency 、Payment Term、 Shipment Term.


package org.compiere.apps.form;import java.awt.BorderLayout;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.Insets;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.image.ColorModel;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.logging.Level;import javax.swing.JScrollPane;import javax.swing.border.TitledBorder;import javax.swing.event.TableModelEvent;import javax.swing.event.TableModelListener;import javax.swing.table.TableColumn;import javax.swing.table.TableColumnModel;import javax.swing.table.TableModel;import org.compiere.apps.ConfirmPanel;import org.compiere.apps.StatusBar;import org.compiere.minigrid.IDColumn;import org.compiere.minigrid.MiniTable;import org.compiere.minigrid.MiniTableColor;import org.compiere.plaf.CompiereColor;import org.compiere.swing.CLabel;import org.compiere.swing.CPanel;import org.compiere.swing.CTextField;import org.compiere.util.CLogger;import org.compiere.util.DB;import org.compiere.util.Env;import org.compiere.util.KeyNamePair;import org.compiere.util.Msg;import org.compiere.util.Trx;public class VCompletePO extends CPanel implements FormPanel, ActionListener, MouseListener {/** *  */private static final long serialVersionUID = -1875564139294965533L;/** * Initialize Panel *  * @param WindowNo *            window * @param frame *            frame */public void init(int WindowNo, FormFrame frame) {log.info("");m_WindowNo = WindowNo;m_frame = frame;AD_Form_ID = m_frame.getAD_Form_ID();m_frame.setLocation(50, 50);try {fillPicks();jbInit();dynInit();frame.getContentPane().add(mainPanel, BorderLayout.CENTER);frame.getContentPane().add(statusBar, BorderLayout.SOUTH);} catch (Exception ex) {log.log(Level.SEVERE, "init", ex);}} // init/** Window No */private int m_WindowNo = 0;/** FormFrame */private FormFrame m_frame;/** Form ID */private int AD_Form_ID = 0;private Trx trx = Trx.get(Trx.createTrxName("AL"), true);// -------------------------------------------------------------------------------------/** Logger */private static CLogger log = CLogger.getCLogger(VUpdateCPCByProduct.class);// -----------------------------------------------------------------------private CLabel lDocNo = new CLabel();private CTextField fDocNo = new CTextField();private CLabel lBPartner = new CLabel();private CTextField fBPartner = new CTextField();// -----------------------------------------------------------------------private CLabel lCurrency = new CLabel();private CTextField fCurrency = new CTextField();private CLabel lPayTerm = new CLabel();private CTextField fPayTerm = new CTextField();private CLabel lShipTerm = new CLabel();private CTextField fShipTerm = new CTextField();// ---------------------------------------------------------------------------------------private int INDEX_H_Boolean = 0;private int INDEX_H_DocNo = 1;private int INDEX_H_Currency = 2;private int INDEX_H_PayTerm = 3;private int INDEX_H_ShipTerm = 4;private int INDEX_L_ID = 0;private int INDEX_L_Line = 1;private int INDEX_L_Product = 2;private int INDEX_L_CPC = 3;private int INDEX_L_VPC = 4;// -----------------------------------------------------------------------private CPanel mainPanel = new CPanel();private BorderLayout mainPanelLayout = new BorderLayout();// North Panelprivate CPanel northPanel = new CPanel();private GridBagLayout northPanelLayout = new GridBagLayout();// Center Panelprivate CPanel centerPanel = new CPanel();private BorderLayout centerPanelLayout = new BorderLayout();// Center Panel --> Header Panelprivate JScrollPane headerPanel = new JScrollPane();private MiniTable HeaderTable = new MiniTable();// Center Panel --> Search Pableprivate CPanel searchPanel = new CPanel();private BorderLayout searchPanelLayout = new BorderLayout();// Search Panel --> Description Pableprivate CPanel descPanel = new CPanel();private GridBagLayout descPanelLayout = new GridBagLayout();// Search Panel --> Lines Panelprivate JScrollPane linesPanel = new JScrollPane();private MiniTableColor linesTable = new MiniTableColor();/** Delete Button */private ConfirmPanel confirmPanelSel = new ConfirmPanel(true, true, false,false, false, false, false);private StatusBar statusBar = new StatusBar();/** * Static Init. *  * <pre> *      selPanel (tabbed) *          fOrg, fBPartner *          scrollPane & miniTable *      genPanel *          info * </pre> *  * @throws Exception */void jbInit() throws Exception {CompiereColor.setBackground(this);// --------------------------------------------------------------------lDocNo.setLabelFor(fDocNo);lBPartner.setLabelFor(fBPartner);lCurrency.setLabelFor(fCurrency);lPayTerm.setLabelFor(fPayTerm);lShipTerm.setLabelFor(lShipTerm);mainPanel.setName("mainPanel");mainPanel.setLayout(mainPanelLayout);/** Main Panel --> Parameter Panel */mainPanel.add(northPanel, BorderLayout.NORTH);northPanel.setLayout(northPanelLayout);TitledBorder border = new TitledBorder(" Parameter ");northPanel.setBorder(border);// 0,0 --> 1,0northPanel.add(lDocNo, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5,5, 5, 5), 0, 0));northPanel.add(fDocNo, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,0, 5, 5), 0, 0));northPanel.add(lBPartner, new GridBagConstraints(2, 0, 1, 1, 0.0,0.0, GridBagConstraints.EAST, GridBagConstraints.NONE,new Insets(5, 5, 5, 5), 0, 0));northPanel.add(fBPartner, new GridBagConstraints(3, 0, 1, 1, 0.0,0.0, GridBagConstraints.WEST, GridBagConstraints.NONE,new Insets(5, 0, 5, 5), 0, 0));/** Main Panel --> Center Panel */mainPanel.add(centerPanel, BorderLayout.CENTER);centerPanel.setLayout(centerPanelLayout);/** Center Panel --> Header Panel */centerPanel.add(headerPanel, BorderLayout.WEST);border = new TitledBorder(" Header ");headerPanel.setBorder(border);headerPanel.getViewport().add(HeaderTable, null);/** Center Panel --> Search Panel */centerPanel.add(searchPanel, BorderLayout.EAST);searchPanel.setLayout(searchPanelLayout);/** Search Panel --> Description Panel */searchPanel.add(descPanel, BorderLayout.NORTH);descPanel.setLayout(descPanelLayout);border = new TitledBorder(" Description ");descPanel.setBorder(border);// 0,0 --> 3,0descPanel.add(lCurrency, new GridBagConstraints(0, 0, 1, 1, 0.0,0.0, GridBagConstraints.EAST, GridBagConstraints.NONE,new Insets(5, 5, 5, 5), 0, 0));descPanel.add(fCurrency, new GridBagConstraints(1, 0, 1, 1, 0.0,0.0, GridBagConstraints.WEST, GridBagConstraints.NONE,new Insets(5, 0, 5, 5), 0, 0));descPanel.add(lPayTerm, new GridBagConstraints(2, 0, 1, 1, 0.0,0.0, GridBagConstraints.EAST, GridBagConstraints.NONE,new Insets(5, 5, 5, 5), 0, 0));descPanel.add(fPayTerm, new GridBagConstraints(3, 0, 1, 1, 0.0,0.0, GridBagConstraints.WEST, GridBagConstraints.NONE,new Insets(5, 0, 5, 5), 0, 0));// 0,1 --> 3,1descPanel.add(lShipTerm, new GridBagConstraints(0, 1, 1, 1, 0.0,0.0, GridBagConstraints.EAST, GridBagConstraints.NONE,new Insets(5, 5, 5, 5), 0, 0));descPanel.add(fShipTerm, new GridBagConstraints(1, 1, 1, 1, 0.0,0.0, GridBagConstraints.WEST, GridBagConstraints.NONE,new Insets(5, 0, 5, 5), 0, 0));/** Search Panel --> Lines Panel */searchPanel.add(linesPanel, BorderLayout.CENTER);border = new TitledBorder(" Lines ");linesPanel.setBorder(border);linesPanel.getViewport().add(linesTable, null);// ---------------------- Main Panel --> South Panel// ----------------------mainPanel.add(confirmPanelSel, BorderLayout.SOUTH);confirmPanelSel.addActionListener(this);} // jbInit/** * Fill Picks. *  * @throws Exception *             if Lookups cannot be initialized */private void fillPicks() throws Exception {//lDocNo.setText(Msg.translate(Env.getCtx(), "DocumentNo"));fDocNo.setName("DocNo Field");fDocNo.setColumns(15);//lBPartner.setText("BPartner Value");fBPartner.setName("BPartner Field");fBPartner.setColumns(15);//lCurrency.setText(Msg.translate(Env.getCtx(), "C_Currency_ID"));fCurrency.setName("Currency Field");fCurrency.setColumns(15);fCurrency.setReadWrite(false);//lPayTerm.setText(Msg.translate(Env.getCtx(), "C_PaymentTerm_ID"));fPayTerm.setName("PayTerm Field");fPayTerm.setColumns(15);fPayTerm.setReadWrite(false);//lShipTerm.setText(Msg.translate(Env.getCtx(), "KF_ShipTerm_ID"));fShipTerm.setName("ShipTerm Field");fShipTerm.setColumns(15);fShipTerm.setReadWrite(false);} // fillPicks/** * Dynamic Init. - Create GridController & Panel - AD_Column_ID from C_Order */private void dynInit() {// create ColumnsHeaderTable.addColumn("IDNumber");HeaderTable.addColumn(Msg.translate(Env.getCtx(), "DocumentNo"));HeaderTable.addColumn("");HeaderTable.addColumn("");HeaderTable.addColumn("");////HeaderTable.setMultiSelection(true);//HeaderTable.setRowSelectionAllowed(true);// set detailsHeaderTable.setColumnClass(INDEX_H_Boolean, Boolean.class, true, " ");HeaderTable.setColumnClass(INDEX_H_DocNo, KeyNamePair.class, true, Msg.translate(Env.getCtx(), "DocumentNo"));HeaderTable.setColumnClass(INDEX_H_Currency, KeyNamePair.class, true, "");HeaderTable.setColumnClass(INDEX_H_PayTerm, KeyNamePair.class, true, "");HeaderTable.setColumnClass(INDEX_H_ShipTerm, KeyNamePair.class, true, "");HeaderTable.autoSize();//HeaderTable.getModel().addTableModelListener(this);HeaderTable.addMouseListener(this);HeaderTable.getTableHeader().setReorderingAllowed(false);HeaderTable.getTableHeader().getColumnModel().getColumn(INDEX_H_Currency).setMaxWidth(0);HeaderTable.getTableHeader().getColumnModel().getColumn(INDEX_H_Currency).setMinWidth(0);TableColumnModel cm = HeaderTable.getColumnModel();TableColumn tc = cm.getColumn(INDEX_H_Currency);tc.setMaxWidth(0);tc.setPreferredWidth(0);tc.setWidth(0);tc.setMinWidth(0);HeaderTable.getTableHeader().getColumnModel().getColumn(INDEX_H_PayTerm).setMaxWidth(0);HeaderTable.getTableHeader().getColumnModel().getColumn(INDEX_H_PayTerm).setMinWidth(0);tc = cm.getColumn(INDEX_H_PayTerm);tc.setMaxWidth(0);tc.setPreferredWidth(0);tc.setWidth(0);tc.setMinWidth(0);HeaderTable.getTableHeader().getColumnModel().getColumn(INDEX_H_ShipTerm).setMaxWidth(0);HeaderTable.getTableHeader().getColumnModel().getColumn(INDEX_H_ShipTerm).setMinWidth(0);tc = cm.getColumn(INDEX_H_ShipTerm);tc.setMaxWidth(0);tc.setPreferredWidth(0);tc.setWidth(0);tc.setMinWidth(0);// create ColumnslinesTable.addColumn("IDNumber");linesTable.addColumn(Msg.translate(Env.getCtx(), "Line"));linesTable.addColumn(Msg.translate(Env.getCtx(), "M_Product_ID"));linesTable.addColumn(Msg.translate(Env.getCtx(), "KF_ProductCPC_ID"));linesTable.addColumn(Msg.translate(Env.getCtx(), "KF_ProductVPC_ID"));////linesTable.setMultiSelection(true);//linesTable.setRowSelectionAllowed(true);// set detailslinesTable.setColumnClass(INDEX_L_ID, IDColumn.class, false, " ");linesTable.setColumnClass(INDEX_L_Line, KeyNamePair.class, true, Msg.translate(Env.getCtx(), "Line"));linesTable.setColumnClass(INDEX_L_Product, KeyNamePair.class, true, Msg.translate(Env.getCtx(), "M_Product_ID"));linesTable.setColumnClass(INDEX_L_CPC, KeyNamePair.class, true, Msg.translate(Env.getCtx(), "KF_ProductCPC_ID"));linesTable.setColumnClass(INDEX_L_VPC, KeyNamePair.class, true, Msg.translate(Env.getCtx(), "KF_ProductVPC_ID"));linesTable.autoSize();linesTable.getTableHeader().setReorderingAllowed(false);// InfostatusBar.setStatusLine("");// @@statusBar.setStatusDB(" ");} // dynInit/** * Query Info */private void showHeader() {log.info("");//HeaderTable.setRowCount(0);//StringBuffer sql = new StringBuffer(" Select o.C_Order_ID,o.DocumentNo,"+ " cur.C_Currency_ID,cur.Iso_Code,"+ " pt.C_PaymentTerm_ID,pt.name,"+ " st.KF_ShipTerm_ID,st.name"+ " From C_Order o"+ " Left Join C_BPartner bp on(bp.C_BPartner_ID = o.C_BPartner_ID)"+ " Left Join C_Currency cur on(cur.C_Currency_ID = o.C_Currency_ID)"+ " Left Join C_PaymentTerm pt on(pt.C_PaymentTerm_ID = o.C_PaymentTerm_ID)"+ " Left Join KF_ShipTerm st on(st.KF_ShipTerm_ID = o.KF_ShipTerm_ID)"+ " Where o.DocStatus in('DR','IP') and o.IsSOTrx = 'N'");if (fDocNo.getText().length() > 0)sql.append(" AND UPPER(o.DocumentNo) LIKE ?");if (fBPartner.getText().length() > 0)sql.append(" AND UPPER(bp.Value) LIKE ?");//sql.append("  ORDER BY O.DocumentNo");log.fine(sql.toString());// reset tableint row = 0;linesTable.setRowCount(row);// ExecutePreparedStatement pstmt = null;ResultSet rs = null;try {pstmt = DB.prepareStatement(sql.toString(), trx.getTrxName());//int index = 1;if (fDocNo.getText().length() > 0)pstmt.setString(index++, getSQLText(fDocNo));if (fBPartner.getText().length() > 0)pstmt.setString(index++, getSQLText(fBPartner));//rs = pstmt.executeQuery();while (rs.next()) {// extend tableHeaderTable.setRowCount(row + 1);// set valuesint C_Order_ID = rs.getInt(1);if(row == 0){m_C_Order_ID = C_Order_ID;alfer_SelRow = 0;}//HeaderTable.setValueAt(new IDColumn(C_Order_ID), row, INDEX_H_ID); //// DocumentNo -> KeyNamePairKeyNamePair knp = new KeyNamePair(C_Order_ID, rs.getString(2));HeaderTable.setValueAt(knp, row, INDEX_H_DocNo);//knp = new KeyNamePair(rs.getInt(3), rs.getString(4));HeaderTable.setValueAt(knp, row, INDEX_H_Currency);//knp = new KeyNamePair(rs.getInt(5), rs.getString(6));HeaderTable.setValueAt(knp, row, INDEX_H_PayTerm);//knp = new KeyNamePair(rs.getInt(7), rs.getString(8));HeaderTable.setValueAt(knp, row, INDEX_H_ShipTerm);// prepare nextrow++;}rs.close();pstmt.close();} catch (SQLException e) {System.out.println(e);log.log(Level.SEVERE, sql.toString(), e);} finally {try {if (rs != null)rs.close();if (pstmt != null)pstmt.close();} catch (SQLException e) {}}pstmt = null;rs = null;//HeaderTable.autoSize();if(HeaderTable.getRowCount() > 0) {executeQuery();}} // showHeader/** * Query Info */private void executeQuery() {log.info("");//HeaderTable.setValueAt(true, alfer_SelRow, 0);//StringBuffer sql = new StringBuffer(" Select ol.C_OrderLine_ID,ol.Line,prd.M_Product_ID,prd.Value,"+ " cpc.KF_ProductCPC_ID,cpc.Name,"+ " vpc.KF_ProductvPC_ID,vpc.Name"+ " From C_OrderLine ol"+ " Left Join M_Product prd on(prd.M_Product_ID = ol.M_Product_ID)"+ " Left Join KF_ProductCPC cpc on(cpc.KF_ProductCPC_ID = ol.kf_cpc)"+ " Left Join KF_ProductVPC vpc on(vpc.KF_ProductVPC_ID = ol.kf_vpc)"+ " Left Join C_Currency cur on(cur.C_Currency_ID = ol.C_Currency_ID)"+ " Where  ol.C_Order_ID = ?");//sql.append("  ORDER BY ol.Line");log.fine(sql.toString());// reset tableint row = 0;linesTable.setRowCount(row);// ExecutePreparedStatement pstmt = null;ResultSet rs = null;try {pstmt = DB.prepareStatement(sql.toString(), trx.getTrxName());pstmt.setInt(1, m_C_Order_ID);rs = pstmt.executeQuery();while (rs.next()) {// extend tablelinesTable.setRowCount(row + 1);// set valuesint c_OrderLine_ID = rs.getInt(1);linesTable.setValueAt(new IDColumn(c_OrderLine_ID), row, 0); //// LinelinesTable.setValueAt(rs.getInt(2), row, 1);// Product Value -> KeyNamePairKeyNamePair knp = new KeyNamePair(rs.getInt(3), rs.getString(4));linesTable.setValueAt(knp, row, 2);// CPC -> KeyNamePairknp = new KeyNamePair(rs.getInt(5), rs.getString(6));linesTable.setValueAt(knp, row, 3);// VPC -> KeyNamePairknp = new KeyNamePair(rs.getInt(7), rs.getString(8));linesTable.setValueAt(knp, row, 4);// prepare nextrow++;}rs.close();pstmt.close();} catch (SQLException e) {System.out.println(e);log.log(Level.SEVERE, sql.toString(), e);} finally {try {if (rs != null)rs.close();if (pstmt != null)pstmt.close();} catch (SQLException e) {}}pstmt = null;rs = null;//linesTable.autoSize();} // executeQuery/** * Dispose */public void dispose() {if (m_frame != null)m_frame.dispose();m_frame = null;// trx.close();} // dispose/** * Get SQL WHERE parameter *  * @param f *            field * @return sql */private String getSQLText(CTextField f) {String s = f.getText().toUpperCase();//if (!s.endsWith("%"))//s += "%";log.fine("String=" + s);return s;} // getSQLTextpublic void actionPerformed(ActionEvent e) {log.info("Cmd=" + e.getActionCommand());log.fine("actionPerformed e ============= " + e.getActionCommand());//if (e.getActionCommand().equals(ConfirmPanel.A_CANCEL)) {// Env.setContext(Env.getCtx(), "trxName", "");dispose();return;}if (e.getActionCommand().equals(ConfirmPanel.A_REFRESH)) {// miniTable.editingStopped(new ChangeEvent(this));showHeader();return;}}private int m_C_Order_ID = 0;private int alfer_SelRow = -1;public void mouseClicked(MouseEvent e) {if (e.getClickCount() > 0 && HeaderTable.getSelectedRow() != -1){//HeaderTable.setValueAt(false, alfer_SelRow, 0);//int editRow = HeaderTable.getSelectedRow();Object data = HeaderTable.getModel().getValueAt(editRow, INDEX_H_DocNo);if (data instanceof KeyNamePair)m_C_Order_ID = ((KeyNamePair)data).getKey();KeyNamePair knp = null;        Object value = HeaderTable.getValueAt(editRow, INDEX_H_Currency);        if(value != null){        knp = (KeyNamePair)value;        fCurrency.setValue(knp.getName());        }        value = HeaderTable.getValueAt(editRow, INDEX_H_PayTerm);        if(value != null){        knp = (KeyNamePair)value;        fCurrency.setValue(knp.getName());        }        value = HeaderTable.getValueAt(editRow, INDEX_H_ShipTerm);        if(value != null){        knp = (KeyNamePair)value;        fCurrency.setValue(knp.getName());        }        //        alfer_SelRow = editRow;        //        executeQuery();}}public void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}public void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}public void mousePressed(MouseEvent e) {// TODO Auto-generated method stub}public void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}}


</pre></p><p><pre name="code" class="java">



原创粉丝点击