Java AbstractSpinnerModel .fireStateChanged ()
Syntax
AbstractSpinnerModel.fireStateChanged() has the following syntax.
protected void fireStateChanged()
Example
In the following code shows how to use AbstractSpinnerModel.fireStateChanged() method.
/*// www . j a v a 2s .c om
This program is a part of the companion code for Core Java 8th ed.
(http://horstmann.com/corejava)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import java.awt.BorderLayout;
import java.awt.GraphicsEnvironment;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import javax.swing.AbstractSpinnerModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;
import javax.swing.SpinnerListModel;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
* A program to test spinners.
*
* @version 1.02 2007-08-01
* @author Cay Horstmann
*/
public class Main extends JFrame {
public static void main(String[] args) {
Main frame = new Main();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public Main() {
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
JPanel buttonPanel = new JPanel();
okButton = new JButton("Ok");
buttonPanel.add(okButton);
add(buttonPanel, BorderLayout.SOUTH);
mainPanel = new JPanel();
mainPanel.setLayout(new GridLayout(0, 3));
add(mainPanel, BorderLayout.CENTER);
JSpinner defaultSpinner = new JSpinner();
addRow("Default", defaultSpinner);
JSpinner boundedSpinner = new JSpinner(
new SpinnerNumberModel(5, 0, 10, 0.5));
addRow("Bounded", boundedSpinner);
String[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getAvailableFontFamilyNames();
JSpinner listSpinner = new JSpinner(new SpinnerListModel(fonts));
addRow("List", listSpinner);
JSpinner reverseListSpinner = new JSpinner(new SpinnerListModel(fonts) {
public Object getNextValue() {
return super.getPreviousValue();
}
public Object getPreviousValue() {
return super.getNextValue();
}
});
addRow("Reverse List", reverseListSpinner);
JSpinner dateSpinner = new JSpinner(new SpinnerDateModel());
addRow("Date", dateSpinner);
JSpinner betterDateSpinner = new JSpinner(new SpinnerDateModel());
String pattern = ((SimpleDateFormat) DateFormat.getDateInstance())
.toPattern();
betterDateSpinner.setEditor(new JSpinner.DateEditor(betterDateSpinner,
pattern));
addRow("Better Date", betterDateSpinner);
JSpinner timeSpinner = new JSpinner(new SpinnerDateModel());
pattern = ((SimpleDateFormat) DateFormat.getTimeInstance(DateFormat.SHORT))
.toPattern();
timeSpinner.setEditor(new JSpinner.DateEditor(timeSpinner, pattern));
addRow("Time", timeSpinner);
JSpinner permSpinner = new JSpinner(new PermutationSpinnerModel("meat"));
addRow("Word permutations", permSpinner);
}
/**
* Adds a row to the main panel.
*
* @param labelText
* the label of the spinner
* @param spinner
* the sample spinner
*/
public void addRow(String labelText, final JSpinner spinner) {
mainPanel.add(new JLabel(labelText));
mainPanel.add(spinner);
final JLabel valueLabel = new JLabel();
mainPanel.add(valueLabel);
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
Object value = spinner.getValue();
valueLabel.setText(value.toString());
}
});
}
public static final int DEFAULT_WIDTH = 400;
public static final int DEFAULT_HEIGHT = 250;
private JPanel mainPanel;
private JButton okButton;
}
/**
* A model that dynamically generates word permutations
*/
class PermutationSpinnerModel extends AbstractSpinnerModel {
/**
* Constructs the model.
*
* @param w
* the word to permute
*/
public PermutationSpinnerModel(String w) {
word = w;
ChangeListener lis = new ChangeListener(){
@Override
public void stateChanged(ChangeEvent e) {
System.out.println(e);
}
};
addChangeListener(lis);
ChangeListener[] listeners = getListeners(ChangeListener.class);
removeChangeListener(lis);
}
public Object getValue() {
return word;
}
public void setValue(Object value) {
if (!(value instanceof String))
throw new IllegalArgumentException();
word = (String) value;
fireStateChanged();
}
public Object getNextValue() {
int[] codePoints = toCodePointArray(word);
for (int i = codePoints.length - 1; i > 0; i--) {
if (codePoints[i - 1] < codePoints[i]) {
int j = codePoints.length - 1;
while (codePoints[i - 1] > codePoints[j])
j--;
swap(codePoints, i - 1, j);
reverse(codePoints, i, codePoints.length - 1);
return new String(codePoints, 0, codePoints.length);
}
}
reverse(codePoints, 0, codePoints.length - 1);
return new String(codePoints, 0, codePoints.length);
}
public Object getPreviousValue() {
int[] codePoints = toCodePointArray(word);
for (int i = codePoints.length - 1; i > 0; i--) {
if (codePoints[i - 1] > codePoints[i]) {
int j = codePoints.length - 1;
while (codePoints[i - 1] < codePoints[j])
j--;
swap(codePoints, i - 1, j);
reverse(codePoints, i, codePoints.length - 1);
return new String(codePoints, 0, codePoints.length);
}
}
reverse(codePoints, 0, codePoints.length - 1);
return new String(codePoints, 0, codePoints.length);
}
private static int[] toCodePointArray(String str) {
int[] codePoints = new int[str.codePointCount(0, str.length())];
for (int i = 0, j = 0; i < str.length(); i++, j++) {
int cp = str.codePointAt(i);
if (Character.isSupplementaryCodePoint(cp))
i++;
codePoints[j] = cp;
}
return codePoints;
}
private static void swap(int[] a, int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
private static void reverse(int[] a, int i, int j) {
while (i < j) {
swap(a, i, j);
i++;
j--;
}
}
private String word;
}
Home »
Java Tutorial »
javax.swing »
Java Tutorial »
javax.swing »