package aliview.gui; import java.awt.Color; import java.awt.Dimension; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.text.AbstractDocument; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.DocumentFilter; import javax.swing.text.PlainDocument; import org.apache.log4j.Logger; public class SearchPanel extends JPanel{ private static final Logger logger = Logger.getLogger(SearchPanel.class); JTextField searchField; JLabel searchMessageLabel; Color NOT_FOUND_COLOR = new Color(255,182,182); Color defaultBG_color; public SearchPanel() { this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); // setMinimumSize(new Dimension(230, 10)); // setMaximumSize(new Dimension(230, 30)); setPreferredSize(new Dimension(210, 30)); searchField = new JTextField(); defaultBG_color = searchField.getBackground(); searchField.setText("Search"); // searchField.getDocument().addDocumentListener(new DocumentListener(){ // public void changedUpdate( DocumentEvent e){ // logger.info("changed"); // } // public void insertUpdate( DocumentEvent e){ // logger.info("insert"); // String text = searchField.getText(); // if(text.contains("\n")){ // logger.info("contains \n"); // text = text.replaceAll("\n", ""); // searchField.setText(text); // } // if(text.contains("\r")){ // logger.info("contains \r"); // text = text.replaceAll("\r", ""); // searchField.setText(text); // } // } // public void removeUpdate( DocumentEvent e){ // // } // }); if(searchField.getDocument() instanceof PlainDocument){ PlainDocument doc = (PlainDocument) searchField.getDocument(); doc.setDocumentFilter(new TrimPastedTextFilter()); } searchField.setColumns(10); searchField.setEnabled(false); searchField.setHorizontalAlignment(SwingConstants.LEFT); searchField.setMaximumSize(new Dimension(130,30)); // searchField.setMinimumSize(new Dimension(130,30)); searchField.setPreferredSize(new Dimension(130, 30)); searchField.addFocusListener(new FocusListener(){ public void focusLost(FocusEvent e) { searchMessageLabel.setText(""); //searchField.setBackground(defaultBG_color); searchField.setEnabled(false); } public void focusGained(FocusEvent e) { searchField.setEnabled(true); searchField.selectAll(); } }); searchField.addMouseListener(new MouseListener() { public void mouseReleased(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseEntered(MouseEvent e) { searchField.setEnabled(true); } public void mouseClicked(MouseEvent e) { } }); searchMessageLabel = new JLabel(); searchMessageLabel.setHorizontalAlignment(JLabel.TRAILING); searchMessageLabel.setMaximumSize(new Dimension(80,30)); // searchMessageLabel.setMinimumSize(new Dimension(95,20)); searchMessageLabel.setPreferredSize(new Dimension(80, 30)); this.add(searchMessageLabel); this.add(Box.createHorizontalStrut(5)); this.add(searchField); } public JTextField getSearchField() { return searchField; } public JLabel getSearchMessageLabel() { return searchMessageLabel; } public void setText(String searchText) { searchField.setText(searchText); } public String getText() { return searchField.getText(); } public void requestFocusAndSelectAll() { searchField.requestFocus(); } public void setFoundMessage() { searchMessageLabel.setText(""); searchField.setBackground(defaultBG_color); } public void setNoFoundMessage() { searchMessageLabel.setText("not found"); searchField.setBackground(NOT_FOUND_COLOR); } class TrimPastedTextFilter extends DocumentFilter { @Override public void insertString(FilterBypass fb, int offset, String inText, AttributeSet attrs) throws BadLocationException { logger.info("instr:" + inText); // trim pasted data from spaces (new line or CR are converted to this when pasted= // length larger than > 1 makes sure we are checking pasted data an still allowing space if typed if(inText != null && inText.length() > 1){ inText = inText.trim(); } super.insertString(fb, offset, inText, attrs); } @Override public void replace(FilterBypass fb, int offset, int length, String inText, AttributeSet attrs) throws BadLocationException { logger.info("replace"); // trim pasted data from spaces (new line or CR are converted to this when pasted= // length larger than > 1 makes sure we are checking pasted data an still allowing space if typed if(inText != null && inText.length() > 1){ inText = inText.trim(); } super.replace(fb, offset, length, inText, attrs); } @Override public void remove(FilterBypass fb, int offset, int length) throws BadLocationException { logger.info("remove"); super.remove(fb, offset, length); } } }