- - PR -
テーブルセルへの直接入力
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-10-14 16:19
はじめまして。
JTextFieldを継承したTableCellEditorを設定しているテーブルセルに、 フォーカスが設定されている状態でのキー入力でエディタを起動させ、 その文字を入力させる方法を考えています。 Microsoft Excelでのセルへの入力のようなイメージです。 何か良い方法はないでしょうか? よろしくお願い致します。 【環境】 WindowsXP j2sdk1.4.2_04 |
|
投稿日時: 2004-10-19 12:08
2つのJTextComponent間でDocumentインスタンスを共有する様に
すれば、簡単に連携できるかもしれません。 それでだめなら、地道に作りこむしかないだろうと思います。 |
|
投稿日時: 2004-10-28 19:11
返答ありがとうございます。
Documentを使用する方法では、始めの状態としてテーブルにフォーカスがあるため、Documentを共有するようにしても編集イベントが発生しないため実現できませんでした。 半角入力モードの場合は、キーを入力されるとKeyEventが発生するため、テーブルにKeyListenerを設定し、キー入力でエディタを起動するようにする事で実現できました。 しかし、ひらがな入力でIMが起動する場合は、キーを入力してもKeyEventが発生しません。強引な方法かもしれませんが、テーブルのgetInputMethodRequests()をオーバーライドして適当なInputMethodRequestsインスタンスを返すようにし、inputMethodListenerを設定してキー入力イベントを取得するようにしました。 この方法でエディタを起動することはできましたが、その際に入力された文字を表示する事ができません。発生したInputMethodEventを憶えておき、エディタのdispatchEvent()メソッドで入力されたように見せる事はできましたが、続けて入力すると始めの一文字が消えてしまいます。 InputMethodやInputContextが関係しているようですが、まだ解決策が見つからない状況です。何かご存知の方がいらっしゃいましたら、ご教授願います。 |
|
投稿日時: 2004-10-29 11:41
IM経由のアクセスであっても、Documentの更新は変換中の文字入力1文字ごとに行われていますよ。ですので、例えばDocumentListenerを使用すれば入力イベントを拾えます。
|
|
投稿日時: 2004-10-29 12:28
JTextComponentを継承しているクラスであれば、Documentを取得できるのですが、キー入力時にフォーカスのあるJTableはJTextComponentを継承していないので、Documentを取得できません。
テーブルとは別のJTextComponentのDocumentを使用するのでしょうか? それとも、テーブルにフォーカスがある状態でキー入力をすると小さな(IMの?)ウインドウが起動しますが、そのDocumentが取得できるのでしょうか? よろしくお願い致します。 |
|
投稿日時: 2004-10-30 14:35
質問にご自分で書いていらっしゃるようですが、
TableCellEditorをJTextFieldをベースに作成しているなら、そのJTextFieldは Document持ってませんか? JTableのカラムにフォーカスを当ててキー入力を行えば、それにイベントが飛ぶと 思いますが… #もしかして、TableModel#isCellEditable(int,int)が常にfalseを返すように #なっていたりしますか?そういう場合は、JTableのチュートリアルを読んでください。 |
|
投稿日時: 2004-11-01 11:25
返答ありがとうございます。
JTextFiledを継承したTableCellEditorがアクティブ(キャレットが点滅している状態)であれば、取得したDocumentからキー入力のイベントを拾えるのですが、ただJTableのカラムにフォーカスがある状態(キャレットが表示されていない状態)では、全角ひらがな入力を行うと小さなウインドウが起動してしまい、TableCellEditorのDocumentにイベントが飛んできませんでした。 何か設定を忘れているのでしょうか? よろしくお願い致します。 |
|
投稿日時: 2004-11-01 14:18
あれ?JTableは、カラムにフォーカスがある状態で文字キーを押下すれば自動的に
セルエディットが開始されるはずですが… キーリスナで文字キー押下イベントを消費してしまったりしていませんか? |