package com.hackerdude.swing.picklist.search; 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 javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.text.PlainDocument; import com.hackerdude.swing.widgets.FloatValueDocument; import com.hackerdude.swing.widgets.IntegerValueDocument; /** * The Search Criteria section of the generic search panel. * */ public class CriteriaPanel extends JPanel { JLabel lblSearchBy = new JLabel(); BorderLayout borderLayout1 = new BorderLayout(); JPanel pnlSearchCriteria = new JPanel(); JTextField fldSearchField = new JTextField(); JPanel pnlFieldCriteria = new JPanel(); public JButton btnFind = new JButton(); JComboBox cbCriteria = new JComboBox(); BorderLayout borderLayout3 = new BorderLayout(); GridBagLayout gridBagLayout2 = new GridBagLayout(); JLabel lblByField = new JLabel(); JPanel pnlSearchTerms = new JPanel(); BorderLayout borderLayout2 = new BorderLayout(); JLabel lblSearchValue = new JLabel(); SearchCriteria lastSelectedItem; ActionListener CRITERIA_CHANGE_HANDLER = new ActionListener() { public void actionPerformed(ActionEvent evt) { if (lastSelectedItem != null ) { affectCriteriaWithTextField(lastSelectedItem); } if ( evt.getActionCommand().equals("comboBoxChanged") ) { SearchCriteria selectedCriteria = getSelectedCriteria(); if ( selectedCriteria != null ) { Class dataType = selectedCriteria.getDataType(); Object currentInput = selectedCriteria.getWhatToSearchFor(); if ( dataType == Integer.class ) { fldSearchField.setDocument(new IntegerValueDocument()); } else if ( dataType == Float.class ) { fldSearchField.setDocument(new FloatValueDocument()); } else { fldSearchField.setDocument(new PlainDocument()); } if ( currentInput != null ) fldSearchField.setText(currentInput.toString()); lastSelectedItem = selectedCriteria; } } } }; public SearchCriteria getSelectedCriteria() { Object selectedItem = cbCriteria.getSelectedItem(); SearchCriteria selectedCriteria = (SearchCriteria)selectedItem; return selectedCriteria; } public CriteriaPanel() { try { jbInit(); cbCriteria.addActionListener(CRITERIA_CHANGE_HANDLER); } catch(Exception ex) { ex.printStackTrace(); } } void jbInit() throws Exception { this.setLayout(borderLayout1); lblSearchBy.setText("Enter the search Criteria"); pnlSearchCriteria.setLayout(gridBagLayout2); pnlFieldCriteria.setLayout(borderLayout3); btnFind.setMnemonic('F'); btnFind.setText("Find"); lblByField.setDisplayedMnemonic('O'); lblByField.setLabelFor(cbCriteria); lblByField.setText("Search On: "); pnlSearchTerms.setLayout(borderLayout2); lblSearchValue.setDisplayedMnemonic('S'); lblSearchValue.setLabelFor(fldSearchField); lblSearchValue.setText("Search For: "); this.add(pnlSearchCriteria, BorderLayout.CENTER); pnlFieldCriteria.add(lblByField, BorderLayout.WEST); pnlFieldCriteria.add(cbCriteria, BorderLayout.CENTER); pnlSearchCriteria.add(pnlSearchTerms, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0 ,GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 250, 0)); pnlSearchTerms.add(fldSearchField, BorderLayout.CENTER); pnlSearchTerms.add(lblSearchValue, BorderLayout.WEST); pnlSearchTerms.add(btnFind, BorderLayout.EAST); this.add(lblSearchBy, BorderLayout.NORTH); pnlSearchCriteria.add(pnlFieldCriteria, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0 ,GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); } public void affectCriteriaWithTextField(SearchCriteria criteria) { String textTypedIn = fldSearchField.getText(); Class dataType = criteria.getDataType(); if ( dataType == Integer.class ) { if ( textTypedIn.equals("") ) textTypedIn = null; if ( textTypedIn != null ) criteria.whatToSearchFor = new Integer(textTypedIn); else criteria.whatToSearchFor = null; } else if ( dataType == Float.class ) { if ( textTypedIn.equals("") ) textTypedIn = null; if ( textTypedIn != null ) criteria.whatToSearchFor = new Float(textTypedIn); else criteria.whatToSearchFor = null; } else criteria.whatToSearchFor = textTypedIn; } public void setEnabled(boolean isEnabled) { super.setEnabled(isEnabled); fldSearchField.setEnabled(isEnabled); cbCriteria.setEnabled(isEnabled); btnFind.setEnabled(isEnabled); } }