Google
 
Web itpro-blogger.blogspot.com
木曜日, 9月 14, 2006

[Java]JSpinnerメモ

▼質問
表示内容(文字列)の横配置(水平位置)はどうすればいいの?

▼回答
下記の方法で出来そう?

JSpinner DateYSpinner = new JSpinner( new SpinnerDateModel( new Date(), null, null, Calendar.YEAR ) );
java.awt.Container cont = (java.awt.Container)( DateYSpinner.getComponent(2) );
java.awt.Component comp = cont.getComponent(0);
javax.swing.JTextField field = (javax.swing.JTextField)comp;
field.setHorizontalAlignment( javax.swing.JTextField.CENTER );

一行で記述すると
((javax.swing.JTextField)( (java.awt.Container)( YearSpinner.getComponent(2) ) ).getComponent(0)).setHorizontalAlignment( javax.swing.JTextField.CENTER );
こんな感じになる。わかりずらいな~(^^;

関数にするとこんな感じかな?パラメータにJSpinnerのオブジェクトと、alignmentに
javax.swing.JTextField.CENTERを指定して呼べばいい感じかな?
private void setHorizontalAlignment( JSpinner spinner, int alignment ) {
java.awt.Container container = (java.awt.Container)( spinner.getComponent(2) );
java.awt.Component component = container.getComponent(0);
javax.swing.JTextField field = (javax.swing.JTextField)component;
field.setHorizontalAlignment( alignment );
}

■参考サイト
http://homepage1.nifty.com/algafield/jpr/srcs/SpinnerDemo.java

【書式付きテキストフィールド】
http://web.sfc.keio.ac.jp/~tetsu/j2se1.5/ja/guide/swing/1.4/ftf.html

▼質問
JSpinnerの「▲」「▼」ボタンのイベントを取得するにはどうしたらいいんだ?

▼回答
こんなコードを書いてまずは解析してみたらいいよ!
JSpinner spinner = new JSpinner();
java.awt.Component c0, c1, c2;
c0 = spinner.getComponent(0); // button
c1 = spinner.getComponent(1); // button
c2 = spinner.getComponent(2); // panel containing textfield
System.out.println(c0.toString());
System.out.println(c1.toString());
System.out.println(c2.toString());

出力結果
javax.swing.plaf.basic.BasicArrowButton[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.5,border=javax.swing.border.CompoundBorder@d1329,flags=4194600,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=,defaultCapable=true]
javax.swing.plaf.basic.BasicArrowButton[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.5,border=javax.swing.border.CompoundBorder@650892,flags=4194600,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=,defaultCapable=true]
javax.swing.JSpinner$ListEditor[,0,0,0x0,invalid,layout=javax.swing.JSpinner$ListEditor,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]
JavaのAPIを解析するのは面白いね!Javaの奥深さがわかってきた感じがしてきて楽しくなってきた。(^^)

わかるってすばらしい!!

マウスクリックイベントの登録をすると下記のようになる。
c0.addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
}
});
c1.addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
}
});

■参考サイト
http://www.javaworld.com/javaforums/showflat.php?Cat=&Board=javabeginner&Number=3300&page=31&view=collapsed&sb=7&o=

▼質問
NumberEditorで作成したスピナーを入力不可にしたんだけど・・・。
どうすればいいの?

▼回答
こうすればいいみたい!
((JSpinner.NumberEditor)spinner.getEditor()).getTextField().setEditable( false );

■参考サイト
【Java Swing JSpinner - てんぷらメモ】
http://terai.xrea.jp/Swing/SpinnerEditor.html

▼質問
NumberEditorで値を設定したい時はどうするんだい!

▼回答
こうすれば表示は変わったけど、spinner.getValue()の値が反映されないみたい!!
JSpinner.NumberEditor numberEditor = (JSpinner.NumberEditor)spinner.getEditor();
numberEditor.getTextField().setText( value );

次のようにするとgetValue()の値がちゃんと反映されるよ!
みそは、commitEdit()だよ~ん!!

try {
JSpinner.NumberEditor numberEditor = (JSpinner.NumberEditor)spinner.getEditor();
numberEditor.getTextField().setText( value );
numberEditor.commitEdit();
}
catch ( ParseException e ) {
e.printStackTrace();
}

▼質問
setValueでこんなエラーが出るんだ?!
java.lang.IllegalArgumentException: invalid sequence element
at javax.swing.SpinnerListModel.setValue(Unknown Source)
at javax.swing.JSpinner.setValue(Unknown Source)

▼回答
SpinnerListModelで設定している最大値・最小値の範囲が超えている可能性があるから!
チェックしてみるといいよ!!

▼質問
SpinnerNumberModelの最大値を再設定したいんだけど!うまくいかないんだ!?
この方法では駄目なのかな?

String Maximum = String.valueOf(10);
((SpinnerNumberModel)Spinner.getModel()).setMaximum(Maximum);

String Maximum = String.valueOf(10);
JSpinner.NumberEditor numberEditor = (JSpinner.NumberEditor)Spinner.getEditor();
((SpinnerNumberModel)numberEditor.getModel()).setMaximum(Maximum);

▼回答
もう一度、SpinnerNumberModelオブジェクトを生成してJSpinnerのsetModelメソッドに
設定すればうまくできるよ。

SpinnerNumberModel model = new SpinnerNumberModel( InitNum, Minimum, Maximum, Step );
Spinner.setModel( model );


[JSP]

▼質問
<%! %>って何?<% %>と何が違うの?

▼回答
JSP内で共通する宣言を使用する時にその内容を記述する書き方だよ。


This page is powered by Blogger. Isn't yours?