- - PR -
TableCellRendererでJFormattedTextField
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2004-05-13 11:24
こんにちは。
swing初心者です、すみません以下について何かご経験があれば 教えてください。 現在JTableの表示で(まだCellEditorまでたどり着いていません) 金額表示(右寄せのカンマ区切り)を表示したいのですが、セルに対 してJFormattedTextFieldを使用して表示する事はできないでしょう か?どなたか実現したご経験がありましたら参考になるサイトでも結 構ですので教えて頂けないでしょうか。 一応rendererは以下のようにしてTableColumnクラスにセットして います。 class DataRenderer extends JFormattedTextField implements TableCellRenderer { public DataRenderer(AbstractFormatterFactory arg0) { super(arg0); } public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setText((String) value); return (this); } } コンストラクタにはDecimalFormatを渡しています new DefaultFormatterFactory(new NumberFormatter( new DecimalFormat("###,###,###,###,###,##0"))); 長々とすみません。上記の様にしてみたのですがカンマ区切りの 表示はされませんでした。何か良い方法はありませんか? よろしくお願いいたします。 すみません。補足です JFormattedTextFieldに対してsetText((String) value);メソッド ではまずいと思いsetValueに変更してみたところ画面一部しか表示 されなくなってしまいました。やはりCellRendererでのサポートまで は考えられていないという事でしょうか? [ メッセージ編集済み 編集者: matu 編集日時 2004-05-13 12:41 ] |
|
投稿日時: 2004-05-13 12:41
>setText((String) value);
JFormattedTextFieldでフォーマット編集表示を行なうには、 JFormattedTextField#setValue()メソッドを使用する必要があると 思います。 setText()メソッドは指定された文字列をそのまま出力するだけですから。 |
|
投稿日時: 2004-05-13 12:47
typerさんすみません。 私も同様の間違いに気づき変更してみましたが、setValueにしたとたん 画面が変な表示になってしまいうまく表示されなくなってしまいました。 |
|
投稿日時: 2004-05-13 14:20
例外がスローされていたりしていませんか?
|
|
投稿日時: 2004-05-13 14:27
こんなのでどうでしょう。
class DataRenderer extends DefaultTableCellRenderer{ final private DecimalFormat formatter; // = new DecimalFormat("###,###,###,###,###,##0"); public DataRenderer(DecimalFormat formatter_){ formatter = formatter_; setHorizontalAlignment(JLabel.RIGHT); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){ setText((value==null)?"":formatter.format(((Double)value).doubleValue())); return this; } } http://www2.gol.com/users/tame/swing/examples/JTableExamples3.html は繋がらないから、 http://www.senun.com/Left/Programming/Java_old/Examples_swing/JTableExamples3.html とか、参考になるのではないかと思います。 |
|
投稿日時: 2004-05-13 19:30
できました setValue(Double.valueOf((String)value)); としました。 Araiさんにお教え頂いたサンプルがヒントでした。 ありがとうございます。 typerさんのおっしゃる通りよくよく見るとNumberFormat が変換時に例外を出力していました。見落としていました。 すみません。。 java.lang.IllegalArgumentException: Cannot format given Object as a Number でもJFormattedTextFieldのsetValueは設定する値について とても慎重にロジックを組まないとだめですね!?入力時であ ればNumberFormatでフォーマットしたJFormattedTextFieldに アルファベットを入れても JFormattedTextField.REVERT JFormattedTextField.COMMIT JFormattedTextField.COMMIT_OR_REVERT JFormattedTextField.PERSIST などの設定によって自動的に戻してくれる様ですがsetValue の場合は画面がおかしくなって表示さえもされなくなりました。 ありがとうございました。 |
1
