- PR -

JSpinnerに関して

1
投稿者投稿内容
ギリジン
会議室デビュー日: 2004/04/19
投稿数: 2
投稿日時: 2004-04-19 20:18
はじめまして。
JSPinnerでの入力制限(数字のみなど)を行いたいと思ったのですが、
なかなかうまくいきません。
spinnerからFormattedTextFieldを取得し、
PlainDocumentを継承したNumericDocument(数値のみ入力許可)をsetDocumentしています。
TextFieldやFormattedTextFieldではうまくいくのですが、
JSpinnerでやってみると、半角英数に関しては入力可。全角に関しては、入力確定(Enter押下)で表示されます。
自分のやり方がまずいのでしょうか?
アドバイスをいただけると幸いです。
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-04-20 01:33
まず、チュートリアル読んだほうが良いですよ。

http://java.sun.com/docs/books/tutorial/uiswing/components/spinner.html
http://java.sun.com/docs/books/tutorial/uiswing/components/formattedtextfield.html

Documentを差し替えるのは、JDK1.3以前の「古い」やり方です。
ギリジン
会議室デビュー日: 2004/04/19
投稿数: 2
投稿日時: 2004-04-20 15:14
引用:

シュンさんの書き込み (2004-04-20 01:33) より:
まず、チュートリアル読んだほうが良いですよ。

Documentを差し替えるのは、JDK1.3以前の「古い」やり方です。



チュートリアルは読んでみたのですが、Formatを利用するというのは、入力時に判別できるのでしょうか?自分の理解不足なのだとは思うのですが。。
NumberFormatやDecimalFormatを利用すると入力自体はできてしまうので。
自分の理想としては数字以外の入力すら許さないということだったのでDocumentのinsertStringをオーバーライドしてやってみたのですが、古い手法だったんですね。。
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-04-22 02:21
チュートリアルへのリンクは失礼でしたね。

コード:
import java.text.*;
import javax.swing.*;
import javax.swing.text.*;

public class SPTest {

	public static void main(String[] args) throws Exception{
		JFrame f = new JFrame();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel p = (JPanel)f.getContentPane();
		MaskFormatter mf = new MaskFormatter("****");
		mf.setValidCharacters("1234567890");
		NumberFormatter nf = new NumberFormatter(new DecimalFormat("0000")){
		    public String valueToString(Object value) throws ParseException {
		    	if(value != null && value instanceof String)
		    		return (String)value;
		    	else
		    		return super.valueToString(value);
		    }

		};
		JFormattedTextField ftf = new JFormattedTextField(new DefaultFormatterFactory(mf,nf));
		ftf.setFormatterFactory(new DefaultFormatterFactory(mf,nf));
		p.add(ftf);
		f.pack();
		f.show();
	}
}



JFormattedTextFieldの入力時、フォーカスロスト時のチェックは、適切なForam
tterを設定するべし、ということは知っていました。

ですが、上記をJSpinnerにそのまま試してみたところ、これでは使えないのですね…
私のほうが無知でした^^;
デバッガで少し追ってみれば、良い具体案が見えそうだと思うのですが…
ちょっと時間が取れそうにないので、どなたかにお任せします。すみませんが、よろ
しくお願いします。お力になれずにすみません。
1

スキルアップ/キャリアアップ(JOB@IT)