package com.bao.lc.site.s3.gui; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.TitledBorder; import com.bao.lc.ResMgr; import com.bao.lc.site.s3.TdUtils; import com.bao.lc.site.s3.bean.GenericBean; import com.bao.lc.site.s3.bean.PassengerInfo; @SuppressWarnings("serial") public class PassengerPanel extends JPanel implements ValueBean<PassengerInfo> { private static final Insets DEFAULT_INSECT_LABEL = new Insets(2, 5, 3, 5); private static final Insets DEFAULT_INSECT_FIELD = new Insets(2, 10, 3, 10); private PassengerInfo rawPassenger = null; private PassengerInfo resultPassenger = null; private JPanel fieldsPanel = new JPanel(); private JTextField nameField = new JTextField(); private JComboBox cardTypeComboBox = new JComboBox(); private JTextField cardnoField = new JTextField(); private JComboBox ticketTypeComboBox = new JComboBox(); private JTextField phoneField = new JTextField(); private JComboBox saveTypeComboBox = new JComboBox(); private JPanel confirmBtnPanel = null; private JButton okBtn = null; private JButton closeBtn = null; public PassengerPanel(PassengerInfo passenger) { this.rawPassenger = passenger; initGUI(); addListeners(); initData(); } private void initGUI() { initFieldsPanel(); initConfirmBtnPanel(); this.setLayout(new BorderLayout()); this.add(fieldsPanel, BorderLayout.NORTH); this.add(confirmBtnPanel, BorderLayout.SOUTH); } private void initFieldsPanel() { fieldsPanel.setLayout(new GridBagLayout()); int row = 0; // Name JLabel nameLabel = new JLabel(ResMgr.getString("td.passenger.name")); addPair(row++, nameLabel, nameField); // CardType List<GenericBean> cardTypes = TdUtils.getCardTypes(); for(GenericBean bean : cardTypes) { cardTypeComboBox.addItem(bean); } JLabel cardTypeLabel = new JLabel(ResMgr.getString("td.passenger.cardtype")); addPair(row++, cardTypeLabel, cardTypeComboBox); // CardNo JLabel cardnoLabel = new JLabel(ResMgr.getString("td.passenger.cardno")); addPair(row++, cardnoLabel, cardnoField); // TicketType List<GenericBean> ticketTypes = TdUtils.getTicketTypes(); for(GenericBean bean : ticketTypes) { ticketTypeComboBox.addItem(bean); } JLabel ticketTypeLabel = new JLabel(ResMgr.getString("td.passenger.tickettype")); addPair(row++, ticketTypeLabel, ticketTypeComboBox); // Phone JLabel phoneLabel = new JLabel(ResMgr.getString("td.passenger.phone")); addPair(row++, phoneLabel, phoneField); // Save? List<GenericBean> saveList = TdUtils.getSaveList(); for(GenericBean bean : saveList) { saveTypeComboBox.addItem(bean); } JLabel saveLabel = new JLabel(ResMgr.getString("td.passenger.issave")); addPair(row++, saveLabel, saveTypeComboBox); fieldsPanel.setBorder(new TitledBorder(ResMgr.getString("td.passenger.info"))); } private void addPair(int row, JLabel label, JComponent component) { fieldsPanel.add(label, new GridBagConstraints(0, row, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, DEFAULT_INSECT_LABEL, 0, 0)); fieldsPanel.add(component, new GridBagConstraints(1, row, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, DEFAULT_INSECT_FIELD, 0, 0)); } private void initConfirmBtnPanel() { okBtn = new JButton(ResMgr.getString("td.ok")); closeBtn = new JButton(ResMgr.getString("td.close")); confirmBtnPanel = new JPanel(); confirmBtnPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 7, 7)); confirmBtnPanel.add(okBtn); confirmBtnPanel.add(closeBtn); } private void addListeners() { okBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { okBtnActionPerformed(); } }); closeBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setValue(null); } }); } private void okBtnActionPerformed() { String name = GUIUtils.getFieldText(nameField); if(name.isEmpty()) { showWarningDialog(ResMgr.getString("td.passenger.warning.name.empty")); return; } String cardno = GUIUtils.getFieldText(cardnoField); if(cardno.isEmpty()) { showWarningDialog(ResMgr.getString("td.passenger.warning.cardno.empty")); return; } String phone = GUIUtils.getFieldText(phoneField); if(phone.isEmpty()) { showWarningDialog(ResMgr.getString("td.passenger.warning.phone.empty")); return; } PassengerInfo passenger = new PassengerInfo(); passenger.name = name; passenger.cardType = getSelectedItemValue(cardTypeComboBox, 1); passenger.cardNo = cardno; passenger.tiketType = getSelectedItemValue(ticketTypeComboBox, 1); passenger.phone = phone; passenger.isSave = getSelectedItemValue(saveTypeComboBox, 1); setValue(passenger); } private void showWarningDialog(String message) { JOptionPane.showMessageDialog(this, message, ResMgr.getString("td.passenger.warning.dialog.title"), JOptionPane.WARNING_MESSAGE); } private void initData() { if(this.rawPassenger == null) { return; } nameField.setText(rawPassenger.name); // CardType setComboBoxSelected(cardTypeComboBox, rawPassenger.cardType, 1, TdUtils.getCardTypes()); cardnoField.setText(rawPassenger.cardNo); // TicketType setComboBoxSelected(ticketTypeComboBox, rawPassenger.tiketType, 1, TdUtils.getTicketTypes()); phoneField.setText(rawPassenger.phone); // Save Type setComboBoxSelected(saveTypeComboBox, rawPassenger.isSave, 1, TdUtils.getSaveList()); } private void setComboBoxSelected(JComboBox comboBox, String key, int keyIndex, List<GenericBean> beans) { GenericBean bean = GenericBean.get(key, keyIndex, beans); if(bean != null) { comboBox.setSelectedItem(bean); } else { comboBox.setSelectedIndex(0); } } private String getSelectedItemValue(JComboBox comboBox, int keyIndex) { GenericBean bean = (GenericBean) comboBox.getSelectedItem(); if(bean == null) { return null; } return bean.getField(keyIndex); } @Override public void setValue(PassengerInfo newValue) { PassengerInfo oldValue = resultPassenger; resultPassenger = newValue; firePropertyChange(VALUE_PROPERTY, oldValue, resultPassenger); } @Override public PassengerInfo getValue() { return resultPassenger; } }