JAVAでの質問です – プログラミング – Home

通知
すべてクリア

[解決済] JAVAでの質問です


ポイ
 ポイ
(@ポイ)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

わからないことがありまして投稿しました。

コンパイルをかけたところ、

long SessionID = (long)combo2.getSelectedItem();

の部分でObjectをlongにキャストできませんと
コンパイルエラーがおきました。

どのようにすれば解決できるのでしょうか?


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

combo2に入っているものがlong型ではないということです。
実際combo2に何が入っているか、確認してください。

確認方法の例:
・combo2に値を入れた当人に聞く
・combo2に値を入れているソースコードを探して調べる
・combo2.getSelectedItem().getClass().getName()
で入っているオブジェクトのクラス名を得る


返信引用
ポイ
 ポイ
(@ポイ)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

レスありがとうございます。
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です。

これでわかるでしょうか??


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

ひょっとして、comboというのは、
java.awt.Choiceオブジェクトですか?

そうすると、java.awt.ChoideのgetSelectedItem()のところを見ると、

| public String getSelectedItem()
| 現在選択されている文字列表現を返します。

と書いてあります。
つまり、戻り値はStringですから、これをlongにキャストすることはできません。
Stringの中身が実は数値を表す文字列であれば、
Long.parseLong()を使って文字列を解析することはできます。


返信引用
ポイ
 ポイ
(@ポイ)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

comboはjavax.swing.JComboBoxのcomboです。
Choiceの方のメソッドを見ましたが、同じ意味だった
ので

Long.parseLong() を使うとは思うのですがその場合

long SessionID = Long.parseLong(combo2);

このように、すればいいのでしょうか?
コーディングの仕方を完全にわかっていないので
よくわかりません。 宜しくお願い致します。


返信引用
ポイ
 ポイ
(@ポイ)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

すいません。間違えました。
javax.swing.JComboBoxのcomboの
getSelectedItem()は戻り値がObjectになってます。

その場合、どうすればいいのでしょうか?


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

javax.swing.JComboBoxの場合は、
addItem()で挿入したオブジェクトが
getSelectedItem()で取り出せるそのものです。

addItem()でStringを入れたなら、
getSelectedItem()で出てくるのはStringです。

(addItem()以外の方法で項目を追加した場合も同様です。)


返信引用
ポイ
 ポイ
(@ポイ)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

getSelectedItem()で取り出せるのが
Objectだと思うのですが、どうすればStringで
取り出せるようになるのでしょうか?

addItem()は、使っていないのですが
いろいろと試してはいるのですが
うまくできない状況です。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

String item = (String)combo.getSelectedItem();

です。


返信引用
ポイ
 ポイ
(@ポイ)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

ありがとうございました。
うまく動くようになったのですが、
comboにデータが入っていないという状況に
なってしまいました。JComboBoxのコンストラクタ
を見ると、longはJComboBox()の()に入らないので
どうやっていれるか悩んでます。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

コンボにはオブジェクトしか入らないので、
プリミティブ型である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();


返信引用
ポイ
 ポイ
(@ポイ)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

上記のようなコーディングで処理するのではなく、
こんな感じです。

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を入れれば
いいのでしょうか??そうすると、クラスが見つからないと言われます        
     


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

すみません、やりたいことが分かりません。

addItemを使わず項目の配列をコンストラクタを使いたいのなら、

Long[] items = new Long(3);
for (int i = 0; i < items.length; i++) {
items[i] = new Long(i番目のlong値);
}
combo2 = new JComboBox(items);

としてください。


返信引用
ポイ
 ポイ
(@ポイ)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

ありがとうございました。
なんとなくわかったような気がします。


返信引用
ポイ
 ポイ
(@ポイ)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

正常に動くようになりました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました