わからないことがありまして投稿しました。
コンパイルをかけたところ、
long SessionID = (long)combo2.getSelectedItem();
の部分でObjectをlongにキャストできませんと
コンパイルエラーがおきました。
どのようにすれば解決できるのでしょうか?
combo2に入っているものがlong型ではないということです。
実際combo2に何が入っているか、確認してください。
確認方法の例:
・combo2に値を入れた当人に聞く
・combo2に値を入れているソースコードを探して調べる
・combo2.getSelectedItem().getClass().getName()
で入っているオブジェクトのクラス名を得る
レスありがとうございます。
combo2に何がはいってるかということですが、
SeesionIDというのを取得したらそのIDを
combo2に自動的に値を入れておくように
したいです。別のファイルでIDは取得するように
なっています。
long[] sessionID = new long[1];
textArea.append(SessionID: + sessionID[0]+\n);
これでIDが実行画面にでます。
sessionIDManager.val = sessionID[0];
このコーディングでIDをsessionIDManager.val
にもっていきます。それを、
long SessionID = (long)combo2.getSelectedItem();
のコーディングのcombo2に自動的にIDが入っていて
そのIDを読み込んでアドレスを取得するといった
感じです。
SessionIDのクラスはSessionInfoというクラスです。
SessionIDのデータ型はlongです。
これでわかるでしょうか??
ひょっとして、comboというのは、
java.awt.Choiceオブジェクトですか?
そうすると、java.awt.ChoideのgetSelectedItem()のところを見ると、
| public String getSelectedItem()
| 現在選択されている文字列表現を返します。
と書いてあります。
つまり、戻り値はStringですから、これをlongにキャストすることはできません。
Stringの中身が実は数値を表す文字列であれば、
Long.parseLong()を使って文字列を解析することはできます。
comboはjavax.swing.JComboBoxのcomboです。
Choiceの方のメソッドを見ましたが、同じ意味だった
ので
Long.parseLong() を使うとは思うのですがその場合
long SessionID = Long.parseLong(combo2);
このように、すればいいのでしょうか?
コーディングの仕方を完全にわかっていないので
よくわかりません。 宜しくお願い致します。
すいません。間違えました。
javax.swing.JComboBoxのcomboの
getSelectedItem()は戻り値がObjectになってます。
その場合、どうすればいいのでしょうか?
javax.swing.JComboBoxの場合は、
addItem()で挿入したオブジェクトが
getSelectedItem()で取り出せるそのものです。
addItem()でStringを入れたなら、
getSelectedItem()で出てくるのはStringです。
(addItem()以外の方法で項目を追加した場合も同様です。)
getSelectedItem()で取り出せるのが
Objectだと思うのですが、どうすればStringで
取り出せるようになるのでしょうか?
addItem()は、使っていないのですが
いろいろと試してはいるのですが
うまくできない状況です。
String item = (String)combo.getSelectedItem();
です。
ありがとうございました。
うまく動くようになったのですが、
comboにデータが入っていないという状況に
なってしまいました。JComboBoxのコンストラクタ
を見ると、longはJComboBox()の()に入らないので
どうやっていれるか悩んでます。
コンボにはオブジェクトしか入らないので、
プリミティブ型であるlongは入りません。
こういうときのためにlongを入れておくためだけの
クラスjava.lang.Longがあります。
combo.addItem(new Long(1));
combo.addItem(new Long(23));
combo.addItem(new Long(432));
...
Long selected = (Long)combo.getSelectedItem();
long value = selected.getLongValue();
上記のようなコーディングで処理するのではなく、
こんな感じです。
long[] sessionID = new long[1];
Filter_addFilter.val = sessionID[0]; ・・・この2行は別のファイルでの
コーディングです。ここで
IDが取得できるようになっています
そして、Filter_addFilterというファイルで取得したIDを
public static long val; と宣言しました。
そして、たとえばこんな感じで
long valueArray[] = new long[4];
for (int i=0; i<valueArray.length; i++)
{
// 配列の初期化処理
}
combo2 = new JComboBox(); の()の中に
seesionIDを入れて、表示させたいです。これは、JComboBoxのポリモフィズム
を使用してやりたいです。valueArrayのところにvalを入れれば
いいのでしょうか??そうすると、クラスが見つからないと言われます
すみません、やりたいことが分かりません。
addItemを使わず項目の配列をコンストラクタを使いたいのなら、
Long[] items = new Long(3);
for (int i = 0; i < items.length; i++) {
items[i] = new Long(i番目のlong値);
}
combo2 = new JComboBox(items);
としてください。
ありがとうございました。
なんとなくわかったような気がします。
正常に動くようになりました。