/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package Sirius.navigator.ui.widget;
/*******************************************************************************
Copyright (c) : EIG (Environmental Informatics Group)
http://www.enviromatics.net
Prof. Dr. Reiner Guettler
Prof. Dr. Ralf Denzer
HTWdS
Hochschule fuer Technik und Wirtschaft des Saarlandes
Goebenstr. 40
66117 Saarbruecken
Germany
Programmers : Pascal
Project : WuNDA 2
Version : 1.0
Purpose :
Created : 12.01.2001
History :
*******************************************************************************/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
/**
* DOCUMENT ME!
*
* @version $Revision$, $Date$
*/
public class DynamicLongField extends JPanel implements AdjustmentListener {
//~ Instance fields --------------------------------------------------------
protected int initialValue = 0;
protected int changeValue = 1;
// fuer die Multilingualitaet
// protected String errorTitle = "Eingabefehler";
// protected String errorString = "<html><p>Dieser Wert liegt ausserhalb</p><p>des gueltigen Bereichs!</p></html>";
protected LongField longField;
protected JScrollBar scrollBar;
//~ Constructors -----------------------------------------------------------
/**
* Creates a new DynamicLongField object.
*/
public DynamicLongField() {
super(new GridBagLayout());
longField = new LongField("0", 3); // NOI18N
initDynamicLongField();
}
/**
* Creates a new DynamicLongField object.
*
* @param initialValue DOCUMENT ME!
* @param changeValue DOCUMENT ME!
*/
public DynamicLongField(final long initialValue, final int changeValue) {
super(new GridBagLayout());
this.changeValue = changeValue;
longField = new LongField(String.valueOf(initialValue), 3);
initDynamicLongField();
}
/**
* Creates a new DynamicLongField object.
*
* @param initialValue DOCUMENT ME!
* @param changeValue DOCUMENT ME!
* @param columns DOCUMENT ME!
*/
public DynamicLongField(final long initialValue, final int changeValue, final int columns) {
super(new GridBagLayout());
this.changeValue = changeValue;
longField = new LongField(String.valueOf(initialValue), columns);
initDynamicLongField();
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*/
protected void initDynamicLongField() {
scrollBar = new JScrollBar(JScrollBar.VERTICAL, 1, 0, 0, 2);
scrollBar.setPreferredSize(new Dimension(
(int)scrollBar.getPreferredSize().getWidth(),
(int)longField.getPreferredSize().getHeight()));
scrollBar.addAdjustmentListener(this);
final GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.EAST;
gbc.fill = GridBagConstraints.NONE;
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.gridy = 0;
gbc.gridx = 0;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
this.add(longField, gbc);
gbc.anchor = GridBagConstraints.WEST;
// gbc.fill = GridBagConstraints.NONE;
gbc.gridx++;
gbc.weightx = 0.0;
gbc.weighty = 0.0;
this.add(scrollBar, gbc);
}
/**
* DOCUMENT ME!
*
* @param value DOCUMENT ME!
*/
public void setValue(final long value) {
try {
longField.setText(String.valueOf(value));
} catch (Exception e) {
// if(Sirius.navigator.NavigatorLogger.DEV)e.printStackTrace(); JOptionPane.showMessageDialog(this,
// errorString, errorTitle, JOptionPane.ERROR_MESSAGE);
longField.setText("0"); // NOI18N
}
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public long getValue() {
try {
return Long.parseLong(longField.getText());
} catch (Exception e) {
// if(Sirius.navigator.NavigatorLogger.DEV)e.printStackTrace(); JOptionPane.showMessageDialog(this,
// errorString, errorTitle, JOptionPane.ERROR_MESSAGE);
longField.setText("0"); // NOI18N
return 0;
}
}
/**
* DOCUMENT ME!
*
* @param changeValue DOCUMENT ME!
*/
public void setChangeValue(final int changeValue) {
this.changeValue = changeValue;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public int getChangeValue() {
return this.changeValue;
}
/**
* DOCUMENT ME!
*
* @param increment DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
protected synchronized long incrementValue(final int increment) {
long inc = this.getValue();
inc += increment;
// NavigatorLogger.printMessage("<DLF> incremented: " + inc);
this.setValue(inc);
return inc;
}
/**
* DOCUMENT ME!
*
* @param decrement DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
protected synchronized long decrementValue(final int decrement) {
long dec = this.getValue();
dec -= (dec >= decrement) ? decrement : 0;
// NavigatorLogger.printMessage("<DLF> decremented: " + dec);
this.setValue(dec);
return dec;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public long incrementValue() {
return incrementValue(changeValue);
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public long decrementValue() {
return decrementValue(changeValue);
}
@Override
public void adjustmentValueChanged(final AdjustmentEvent e) {
if (scrollBar.getValue() == 0) {
// NavigatorLogger.printMessage("<DLF> increment: " + changeValue);
incrementValue(changeValue);
}
if (scrollBar.getValue() == 2) {
// NavigatorLogger.printMessage("<DLF> decrement: " + changeValue);
decrementValue(changeValue);
}
// Reset the BoundedRangeModel
scrollBar.setValue(1);
}
}
/**
* Ein JTextField, dass nur die Eingabe von ganzen Zahlen erlaubt.
*
* @version $Revision$, $Date$
*/
class LongField extends JTextField {
//~ Constructors -----------------------------------------------------------
/**
* Creates a new LongField object.
*/
public LongField() {
super();
}
/**
* Creates a new LongField object.
*
* @param cols DOCUMENT ME!
*/
public LongField(final int cols) {
super(cols);
}
/**
* Creates a new LongField object.
*
* @param text DOCUMENT ME!
* @param cols DOCUMENT ME!
*/
public LongField(final String text, final int cols) {
super(text, cols);
}
//~ Methods ----------------------------------------------------------------
@Override
protected Document createDefaultModel() {
return new NumericDocument();
}
//~ Inner Classes ----------------------------------------------------------
/**
* Dieses PlainDocument nimmt nur Ganzzahlen.
*
* @version $Revision$, $Date$
*/
static class NumericDocument extends PlainDocument {
//~ Static fields/initializers -----------------------------------------
protected static final String LONG = "0123456789"; // NOI18N
//~ Methods ------------------------------------------------------------
@Override
public void insertString(final int offs, final String str, final AttributeSet a) throws BadLocationException {
if (str == null) {
remove(0, getLength());
super.insertString(0, "0", a); // NOI18N
return;
}
for (int i = 0; i < str.length(); i++) {
if (LONG.indexOf(str.valueOf(str.charAt(i))) == -1) {
remove(0, getLength());
super.insertString(0, "0", a); // NOI18N
return;
}
}
super.insertString(offs, str, a);
}
}
}