Страница 1 из 1
InputVerifier
Добавлено: 24 мар 2006, 17:58
michael
сделал
два класса
Код: Выделить всё
public class General
{
//check if some string is numeric
public static boolean isNonNegativeNumber(String str)
{
for (int i=0;i<str.length();i++)
if (!Character.isDigit(str.charAt(i)))
return false;
return true;
}
}
Код: Выделить всё
import javax.swing.InputVerifier;
import javax.swing.JComponent;
import javax.swing.JSpinner;
import javax.swing.JTextField;
public class PositiveInputVerifier extends InputVerifier{
public boolean verify(JComponent e) {
if (e instanceof JTextField)
return General.isNonNegativeNumber( ((JTextField)e).getText() );
if (e instanceof JSpinner)
return General.isNonNegativeNumber( ((JSpinner)e).getValue().toString() );
return false;
}
}
на главной форме есть JSpinner-mySpinner
Код: Выделить всё
mySpinner.setInputVerifier(new PositiveInputVerifier());
но чего то я могу вставлять и негативные значения. Почему?
Добавлено: 24 мар 2006, 18:01
michael
извиняюсь. Вот тот код что я хотел переписать.
public class General
{
//check if some string is numeric
public static boolean isNonNegativeNumber(String str)
{
for (int i=0;i<str.length();i++)
if (!Character.isDigit(str.charAt(i))|| str.charAt(i)==('-'))
return false;
return true;
}
}
но всё равно не работает
Добавлено: 24 мар 2006, 18:47
Oscar
Код: Выделить всё
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
public class Test extends JFrame {
private static final long serialVersionUID = 1L;
public Test() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(2, 1));
JSpinner mySpinner = new JSpinner();
//The numbers from left to right are:
//Starting value, minimum, maximum, step size
SpinnerNumberModel model = new SpinnerNumberModel(0, 0, 10000, 1);
mySpinner.setModel(model);
add(mySpinner);
add(new JButton("Button"));
pack();
setVisible(true);
}
public static void main(String[] args) {
new Test();
}
}
Добавлено: 24 мар 2006, 19:24
michael
Уважаемый Оскар. Это похоже на то что мне надо. Но этот подход позволяет вводить негативные значения в ручную и если кликается кнопка которая обрабатывает значение JSpinner то она получит негативное значение.
Вот в этом коде приведён пример как с помощью InputVerifier сделать так что даже фокус не снимается со спинера если так не соответствуещее значение
Код: Выделить всё
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
// This program demonstrates the use of the Swing InputVerifier class.
// It creates two text fields; the first of the text fields expects the
// string "pass" as input, and will allow focus to advance out of it
// only after that string is typed in by the user.
public class K extends JFrame {
public K() {
JTextField tf1 = new JTextField ("Type \"pass\" here");
getContentPane().add (tf1, BorderLayout.NORTH);
tf1.setInputVerifier(new PassVerifier());
JTextField tf2 = new JTextField ("TextField2");
getContentPane().add (tf2, BorderLayout.SOUTH);
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
addWindowListener(l);
}
class PassVerifier extends InputVerifier {
public boolean verify(JComponent input) {
JTextField tf = (JTextField) input;
return "pass".equals(tf.getText());
}
}
public static void main(String[] args) {
Frame f = new K();
f.pack();
f.setVisible(true);
}
}
вот такое же мне хотелось бы провернуть только с числами
Добавлено: 24 мар 2006, 20:47
Oscar
michael, сейчас провернём ;-)
А пока что
michael писал(а):но чего то я могу вставлять и негативные значения. Почему?
InputVerifier вообще не вызывается!
Поскольку не туда повешен.
Добавлено: 24 мар 2006, 21:36
Oscar
Код: Выделить всё
import java.awt.BorderLayout;
import javax.swing.InputVerifier;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;
public class Test extends JFrame {
private static final long serialVersionUID = 1L;
protected JSpinner mySpinner;
public Test() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JSpinner mySpinner = new JSpinner();
mySpinner.setModel(new SpinnerNumberModel(0, 0, 10000, 1));
((JSpinner.NumberEditor)mySpinner.getEditor()).getTextField().setInputVerifier(new PositiveVerifier());
add(mySpinner, BorderLayout.NORTH);
add(new JTextField(""), BorderLayout.SOUTH);
pack();
setVisible(true);
}
class PositiveVerifier extends InputVerifier {
public boolean verify(JComponent input) {
JTextField tf = (JTextField) input;
int value = 0;
try {
value = Integer.parseInt(tf.getText());
} catch (NumberFormatException e) {
return false;
}
if (value >= 0)
return true;
else
return false;
}
}
public static void main(String[] args) {
new Test();
}
}
О как они его далеко запихнули :-D
Добавлено: 24 мар 2006, 22:04
michael
Премного благодарен. Обсолютно не понятно почему они так наизвразялись