Mercurial > hg > jslab
view src/samer/core_/viewers/swing/NumberViewer.java @ 5:b67a33c44de7
Remove some crap, etc
author | samer |
---|---|
date | Fri, 05 Apr 2019 21:34:25 +0100 |
parents | bf79fb79ee13 |
children |
line wrap: on
line source
/* * NumberViewer.java * * Copyright (c) 2000, Samer Abdallah, King's College London. * All rights reserved. * * This software is provided AS iS and WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. */ package samer.core.viewers.swing; import samer.core.util.*; import samer.core.*; import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; abstract class NumberViewer extends VariableViewer implements FocusListener, ChangeListener, ActionListener { JTextField t=null; volatile boolean ignoreTextChange=false, ignoreSliderChange=false; protected NumberViewer(Variable v) { super(v); setLayout(new BoxLayout(panel(),BoxLayout.X_AXIS)); } protected void init() { init(true); } protected void init(boolean entry) { Dimension d; JComponent s = createSlider(); if (s!=null) { d=s.getPreferredSize(); d.width=80; s.setPreferredSize(d); if (s instanceof JSlider) add(s); else { add(Box.createHorizontalStrut(4)); add(s); add(Box.createHorizontalStrut(4)); } } else { add(Box.createHorizontalGlue()); } if (entry) { t = new JTextField(6); d=t.getPreferredSize(); d.width *= 2; t.setMaximumSize(d); t.addFocusListener(this); t.addActionListener(this); add(t); } update(null,null); } protected abstract JComponent createSlider(); protected abstract void getText() throws Exception; protected abstract void setText(); protected abstract void getSlider(); protected abstract void setSlider(); // ....... Viewer bits ................................... public void update(Observable o, Object source) // &&& { if (source!=this) { ignoreTextChange=true; ignoreSliderChange=true; if (t!=null) setText(); setSlider(); ignoreTextChange=false; ignoreSliderChange=false; } super.update(o,source); } // ----------- event handling ------------- private void textChanged() { if (ignoreTextChange) return; // enter pressed in text field: // read value from text, set slider and // notify observers. try { getText(); ignoreSliderChange=true; setSlider(); ignoreSliderChange=false; variable.changed(this); } catch (Exception ex) { Shell.trace(ex.toString()); } } public void stateChanged(ChangeEvent e) { if (ignoreSliderChange) return; getSlider(); ignoreTextChange=true; if (t!=null) setText(); ignoreTextChange=false; variable.changed(this); } public void focusGained( FocusEvent e) {} public void focusLost( FocusEvent e) { if (e.getSource()==t) textChanged(); } public void actionPerformed( ActionEvent e) { if (e.getSource()==t) textChanged(); } }