JSpinner的输入事件怎么捕捉? JSpinner的用微调按钮可以改变值, 这个改变可以用ChangeListener来捕捉. 但是如果是直接输入的数据, 这个事件应该用何种类型的Listener来监听?我是想实现这个一个功能: 如果JSpinner的值改变了, 则把一个按钮的变成可用. 但是输入的(不是用按钮调的)如果是一个合法的值, 仍然把按钮变成可用. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 import java.awt.Container;import java.awt.Dimension;import java.awt.Graphics;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;public class TestGUI extends JFrame { public TestGUI() { this.setBounds(300, 300, 300, 300); Container c = this.getContentPane(); final JButton button = new JButton("Apply"); button.setEnabled(false); button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub ((JButton)e.getSource()).setEnabled(false); }}); JSpinner js = new JSpinner(new SpinnerNumberModel(0, 0, 1, 0.01)); js.setEditor(new JSpinner.NumberEditor(js, "0%")); js.addChangeListener(new ChangeListener(){ public void stateChanged(ChangeEvent e) { // TODO Auto-generated method stub button.setEnabled(true); } }); c.add(button, "North"); c.add(js, "Center"); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new TestGUI(); }}这是已经实现了的代码, 现在问题是如果我输入一个合法的百分数, 我想让BUTTON也变成可用, 应该怎么做.实现后马上结贴. 这个要输入完成之后才触发, 可以用失去焦点触发Listener或者你输入值得长度是固定的,使用键盘Listener,监视输入,一旦位数达到固定值,就比较判断是否设置Button PS : 你的代码,输入后,回车就可以了-----------------------------------确实是这样, 但是我希望的是即时输入就触发, 并且同时进行合法检查. 如果合法BUTTON就可用, 不合法仍然保持灰的. 加人keyListener即可import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JSpinner;import javax.swing.SpinnerNumberModel;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;public class TestGUI extends JFrame { JSpinner js; JButton button; public TestGUI() { this.setBounds(300, 300, 300, 300); Container c = this.getContentPane(); button = new JButton("Apply"); button.setEnabled(false); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub ((JButton) e.getSource()).setEnabled(false); } }); js = new JSpinner(new SpinnerNumberModel(0, 0, 1, 0.01)); JSpinner.NumberEditor editor = new JSpinner.NumberEditor(js, "0%"); editor.getTextField().addKeyListener(new KeyListener() { public void keyPressed(KeyEvent e) { } public void keyReleased(KeyEvent e) { String text = ((JSpinner.NumberEditor) js.getEditor()) .getTextField().getText(); int value = Integer.parseInt(text.substring(0, text.length() - 1)); if (value >= 0 && value <= 100) { button.setEnabled(true); } else { button.setEnabled(false); } } public void keyTyped(KeyEvent e) { } }); js.setEditor(editor); js.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { // TODO Auto-generated method stub button.setEnabled(true); } }); c.add(button, "North"); c.add(js, "Center"); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new TestGUI(); }} 楼上的思路是对的,至于异常,楼主不会连这个都不会处理吧??------------------------------确实如此, 惭愧啊, 真的没有想到太完美的解决办法. 可以提示一下吗? 不要告诉我用try catch.其实用keylistener也不是我想用的方案, 因为这样做相当于完全抛弃了JSpinner的Editor本身所的作用, 而是把判断是否合法的工作完全留给了自己, 但除了这个好像也没有什么太好的方案能够实时检查输入是否合法.没什么新的建议明天就结贴了. 关于内容返回的问题? 有意思的问题,欢迎探讨 我也出个经典的题目啊 二进制的异或处理问题 关于四舍五入问题 关于import的一个基础问题 java 有没有将单个字符 "A"复制10遍的函数,得"AAAAAAAAAA" Java初学者问题 如何实现不解压zip将zip里面的文件夹删除 关于jbuilder8的问题! 寻求:如何配匹正则表达式!! 有没有jfreechart根据数据库中得数据画折线图得完整得例子?
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;public class TestGUI extends JFrame {
public TestGUI() {
this.setBounds(300, 300, 300, 300);
Container c = this.getContentPane();
final JButton button = new JButton("Apply");
button.setEnabled(false);
button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
((JButton)e.getSource()).setEnabled(false);
}});
JSpinner js = new JSpinner(new SpinnerNumberModel(0, 0, 1, 0.01));
js.setEditor(new JSpinner.NumberEditor(js, "0%"));
js.addChangeListener(new ChangeListener(){ public void stateChanged(ChangeEvent e) {
// TODO Auto-generated method stub
button.setEnabled(true);
}
}); c.add(button, "North");
c.add(js, "Center");
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new TestGUI();
}}
这是已经实现了的代码, 现在问题是如果我输入一个合法的百分数, 我想让BUTTON也变成可用, 应该怎么做.
实现后马上结贴.
-----------------------------------
确实是这样, 但是我希望的是即时输入就触发, 并且同时进行合法检查. 如果合法BUTTON就可用, 不合法仍然保持灰的.
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;public class TestGUI extends JFrame {
JSpinner js; JButton button; public TestGUI() {
this.setBounds(300, 300, 300, 300);
Container c = this.getContentPane(); button = new JButton("Apply");
button.setEnabled(false);
button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
((JButton) e.getSource()).setEnabled(false);
}
}); js = new JSpinner(new SpinnerNumberModel(0, 0, 1, 0.01));
JSpinner.NumberEditor editor = new JSpinner.NumberEditor(js, "0%");
editor.getTextField().addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) { } public void keyReleased(KeyEvent e) {
String text = ((JSpinner.NumberEditor) js.getEditor())
.getTextField().getText();
int value = Integer.parseInt(text.substring(0,
text.length() - 1));
if (value >= 0 && value <= 100) {
button.setEnabled(true);
} else {
button.setEnabled(false);
} } public void keyTyped(KeyEvent e) { }
});
js.setEditor(editor);
js.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) {
// TODO Auto-generated method stub
button.setEnabled(true);
} }); c.add(button, "North");
c.add(js, "Center");
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new TestGUI();
}}
------------------------------
确实如此, 惭愧啊, 真的没有想到太完美的解决办法. 可以提示一下吗? 不要告诉我用try catch.
其实用keylistener也不是我想用的方案, 因为这样做相当于完全抛弃了JSpinner的Editor本身所的作用, 而是把判断是否合法的工作完全留给了自己, 但除了这个好像也没有什么太好的方案能够实时检查输入是否合法.
没什么新的建议明天就结贴了.