/* SegmentTextField.java created 2008-03-05 * */ package org.signalml.app.view.book; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.JTextField; /** SegmentTextField * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public class SegmentTextField extends JTextField implements PropertyChangeListener { private static final long serialVersionUID = 1L; private BookView bookView; public SegmentTextField() { super(); setHorizontalAlignment(JTextField.CENTER); addFocusListener(new FocusListener() { @Override public void focusGained(FocusEvent e) { selectAll(); } @Override public void focusLost(FocusEvent e) { trySet(getText()); } }); addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { setText(""); requestFocusInWindow(); } }); addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { trySet(getText()); } }); } public SegmentTextField(BookView bookView) { this(); setBookView(bookView); } public BookView getBookView() { return bookView; } public void setBookView(BookView bookView) { if (this.bookView != bookView) { if (this.bookView != null) { this.bookView.removePropertyChangeListener(BookView.CURRENT_SEGMENT_PROPERTY, this); } this.bookView = bookView; if (bookView != null) { bookView.addPropertyChangeListener(BookView.CURRENT_SEGMENT_PROPERTY, this); } setCurrentText(); } } public void setCurrentText() { if (bookView == null) { setText(""); setEditable(false); } else { setText((bookView.getCurrentSegment()+1) + " / " + bookView.getSegmentCount()); setEditable(true); } } private void trySet(String text) { if (bookView == null) { return; } text = text.trim(); Integer index = null; try { index = new Integer(text); } catch (NumberFormatException ex) { // proceed } if (index != null) { // this was a number int count = bookView.getDocument().getSegmentCount(); if (index < 1) { index = 1; } else if (index > count) { index = count; } bookView.setCurrentSegment(index-1); } setCurrentText(); } @Override public void setPreferredSize(Dimension preferredSize) { super.setPreferredSize(preferredSize); setMinimumSize(preferredSize); setMaximumSize(preferredSize); } @Override public void propertyChange(PropertyChangeEvent evt) { setCurrentText(); } }