トップページ⇒tech
1001コメント344KB

【初心者】Java質問・相談スレッド103【大歓迎】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/06/27(水) 07:23:27
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc10.2ch.net/hp/

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/
これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 http://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

前スレッド
【初心者】Java質問・相談スレッド102【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1180419689/

/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。

次スレは>>980あたりで。
0383デフォルトの名無しさん2007/07/05(木) 09:35:44
お客さんに気に入られてアドバイスしているが
ほとんど無報酬のボランティアで答えている俺は
SE兼PG兼奴隷です。
0384デフォルトの名無しさん2007/07/05(木) 10:37:04
JavaってFTPクライアントはカンタンにできると思っていましたが
ソケットで自作しないとだめなんでしょうか?
0385デフォルトの名無しさん2007/07/05(木) 10:57:13
標準ライブラリのみなら、そういう認識であってる。
外部のライブラリ使えば簡単にできる。commons netとか
ttp://jakarta.apache.org/commons/net/
0386デフォルトの名無しさん2007/07/05(木) 11:37:20
>>378
Java "Script"なら関数オブジェクトを変数に入れて
コールすれば内部処理的にも関数ポインタに近いんだけどなぁ・・・
クロージャが追加されれば似たような事が出来るけど
Javaのクロージャってレキシカルスコープ引き継ぐんだろうか?

>>381
やさしいjavaをきれいさっぱり忘れて他の本をじっくり読む。マジオヌヌメ。
0387デフォルトの名無しさん2007/07/05(木) 12:03:03
質問させていただきます
htmlで<textarea>に入力した文字をdatファイルに出力しようとしています、正確にはJavaではなくJSPを使っていますが
・Htmlソース部分
<form action="test.jsp"method="POST">
<textarea rows=5 cols=60 name="honbun" wrap="off"></textarea>
<input type="submit"name="save"value="送信">
</form>
・Javaソース部分
String path = "フォルダパス";
String fname = "out.dat";
String gen = request.getParameter("honbun");
String hon = gen.replaceAll("\n","<br>");
BufferedWriter logwrite = new BufferedWriter(new FileWriter(path+ File.separatorChar +fname,true));
logwrite.write(hon);
logwrite.newLine();
logwrite.close();

改行コードを<br>に変換してdatファイルに出力しようとしていますが、<br>は付与されますがどうしても改行コードが残ってしまいます
datファイル内でも改行されないように出力出来ないでしょうか?(例えるなら、ギコナビのスレッドdatファイルの様に)
datファイルを見るのにはTeraPadを使用していますが、メモ帳では改行されていないように見えます
もしかするとTeraPadで見るのが原因なのでしょうか・・・しかしギコナビのdatファイルはTeraPadでも改行されずに表示されます
0388デフォルトの名無しさん2007/07/05(木) 12:10:35
>>387
\rが入ってるとか?
0389デフォルトの名無しさん2007/07/05(木) 12:11:16

LFだけ消して
CRLFを消してないから
CRが残ってる

03903872007/07/05(木) 12:21:08
なるほど、改行コードは\nしか使っていなかったので盲点でした
\rを消して無事に一行で出力することができました
>>388さん>>389さんご回答ありがとうございました!
0391デフォルトの名無しさん2007/07/05(木) 13:04:01
\nはエスケープシーケンスで改行コードは別だよね?
Javaのばあい、動作してるプラットフォームの改行コードに変換されるんじゃなかったけ?
0392デフォルトの名無しさん2007/07/05(木) 13:25:24
1行目も2行目もNo
0393デフォルトの名無しさん2007/07/05(木) 13:28:12
ブラウザから送ってきたものそのままだと思うが、
ブラウザがどういった改行コードを送ってくるかは環境依存?それとも何か決まりはある?
0394デフォルトの名無しさん2007/07/05(木) 13:36:19
MacからはCRで送られてくるし
WindowsからはCRLFで送られてくるし
UNIX系からはLFで送られてくるよ

HTTP以外のSMTPとかのプロトコルだと
ちゃんとCRLFになってるみたいだけどね
0395デフォルトの名無しさん2007/07/05(木) 13:52:38
JTreeでエクスプローラみたいなの作ろうとしてるんだけど
システム上でファイルに関連付けられてるアイコンを
自動的に表示するような方法ってない?

やっぱりひとつひとつアイコン設定するしかない?
0396デフォルトの名無しさん2007/07/05(木) 13:55:19
あるよ
0397デフォルトの名無しさん2007/07/05(木) 13:56:43
UIリソース変えるだけで済まない?
0398デフォルトの名無しさん2007/07/05(木) 14:00:00
>>396
そうなんだ!
どうやるの?
0399デフォルトの名無しさん2007/07/05(木) 14:56:46
>>398
ファイルに関連づけられてるアイコンって、
OS依存な気がするんだが・・・>>396は何か勘違いしてる気が・・・
0400デフォルトの名無しさん2007/07/05(木) 14:59:09
違うよ、お前に言ったんじゃないよ
0401デフォルトの名無しさん2007/07/05(木) 15:00:06
>>399
JTree上のアイコンだろ?
0402デフォルトの名無しさん2007/07/05(木) 15:12:33
確かにフォルダの絵とかはUIリソースで変えられると思うが
エクスプローラみたいなのを作りたいってことは、exeファイルのアイコンとか
関連づけられたアプリのアイコンとかにしたいってことなんじゃないの?
>>401
0403デフォルトの名無しさん2007/07/05(木) 15:47:41
>>402
そういうことっす
0404デフォルトの名無しさん2007/07/05(木) 19:04:57
アイコンを用意するところからだな。
0405デフォルトの名無しさん2007/07/05(木) 20:49:42
インスタンスの生成と破棄に関するパフォーマンスを調べたいのですが、測定ツールみたいなものはありますか?
0406デフォルトの名無しさん2007/07/05(木) 21:03:29
>>403
同じプログラムを Linux へ持っていたらまったく意図した通りに動かない、ということですな・・・
0407デフォルトの名無しさん2007/07/05(木) 21:05:44
Write once, Run one platform.
0408デフォルトの名無しさん2007/07/05(木) 21:30:39
ファイラはどうやってアイコンとってきてるんだろね
デフォルトはシステムのどっかにアーカイブされてるんだろうが
0409デフォルトの名無しさん2007/07/05(木) 21:45:57
explorer.exe とか run32.dll のなかにアイコンリソースがいっぱいあるね
0410デフォルトの名無しさん2007/07/05(木) 21:50:05
JDICにそれっぽいAPIがありそうな感じ。
ttps://jdic.dev.java.net/
この辺のAssociationとか使えそうじゃね?
ttps://jdic.dev.java.net/documentation/Examples.html
0411デフォルトの名無しさん2007/07/05(木) 22:50:43
https://jdic.dev.java.net/ のしたの方にデモがあるね
http://javadesktop.org/jdic/demo/FileExplorer/fileexplorer.jnlp
0412デフォルトの名無しさん2007/07/05(木) 22:51:45
サーバプログラムでクライアントから入力があれば、文字列を受信して、画面にその文字列を表示してループを抜ける。
また、画面から入力(Enter)があれば、ループを抜けずに、プログラムを強制終了させる。
上記の問題で条件文のことで質問があります。

while(true){
// 省略
if(System.in.available() > 0)
break;
}
「入力があれば」は上記if文でいいのでしょうか?
またEnterキーが入力された場合はどのように条件文を書けばいいのですか?
0413デフォルトの名無しさん2007/07/05(木) 22:58:57
jarファイルにしたら外部に別のファイルを出力させることはできませんか?
0414デフォルトの名無しさん2007/07/05(木) 23:01:12
>>411
それだと、ファイルの種類にかかわらずアイコンが全部同じになってるんだよね。
他に方法があるといいんだけど。
0415デフォルトの名無しさん2007/07/05(木) 23:07:24
>>412
まったく意図が通じていないと思うがエスパーしてみる
socket.getInputStream() を使ってバイナリを受信するべし
04164122007/07/05(木) 23:20:24
すいません。
・画面からの入力が「Enterキー」ならプログラム強制終了。
の部分だけを知りたかったんです。
サーバ、クライアントなしでただのプログラムとして考えてください。
0417デフォルトの名無しさん2007/07/05(木) 23:21:27
Javaでなんか作ってるスレない?
0418デフォルトの名無しさん2007/07/05(木) 23:30:01
http://pc11.2ch.net/test/read.cgi/tech/1179168569/
0419デフォルトの名無しさん2007/07/05(木) 23:33:58
System.inをScannerに放り込んで、nextLine()で終了。
Scanner scanner = new Scanner(System.in);
scanner.nextLine();
0420デフォルトの名無しさん2007/07/05(木) 23:42:01
>>414
たぶんもう見てると思うけど
http://wisdom.sakura.ne.jp/system/java/swing/swing38.html
の一番下のとか
http://terai.xrea.jp/Swing/PreviewAccessory.html
とかがあるよね
でも >>395 の
「やっぱりひとつひとつアイコン設定するしかない? 」
の不満は解消されてないっぽ
シコシコやっても >>406-407 みたいになるのがオチ
0421デフォルトの名無しさん2007/07/05(木) 23:43:41
ネットワークプログラミングの参考書で
お勧めの教えてくらさい

軽くその本の内容も書いてくれると嬉しいです
0422デフォルトの名無しさん2007/07/05(木) 23:49:54
Javaネットワークプログラミングの真髄
0423デフォルトの名無しさん2007/07/05(木) 23:57:28
>>422
サンクス
ググってみたが,出版されて日が浅いせいか
全然レビューないな
とりあえず,明日本屋で立ち読みしてみるわ
0424デフォルトの名無しさん2007/07/06(金) 00:04:15
>>420
jdicのAssociationServiceのgetFileExtensionAssociationで拡張子指定して
Associationを取得してgetIconFileName()を使うとなんか帰ってくるな。
なんでか「絶対パス,整数」の形式になってる。
数字の意味がわからないが絶対パスの先はアイコンではなく
実行ファイルなのであった・・。

ああ、もしかするとアイコンを使ってるファイルのパスが帰ってくるのか(´д`)
0425デフォルトの名無しさん2007/07/06(金) 00:04:25
執筆者乙
0426デフォルトの名無しさん2007/07/06(金) 00:05:50
>>424
整数はリソースの番号だろ
0427デフォルトの名無しさん2007/07/06(金) 00:06:45
>>424
アイコンを使ってるファイルのパスじゃなくて
アイコンを格納しているファイルだろうね
0428デフォルトの名無しさん2007/07/06(金) 00:13:18
>>420を見て、Windows L&FにするとJFileChooserに適切なアイコンが表示されることを思い出した。
で、「もしや?」と思って試してみた。
上手くいったぞ。こんなコード。
JFileChooser chooser = new JFileChooser();
FileChooserUI ui = chooser.getUI();
FileView fileView = ui.getFileView(chooser);
JLabel pdfIcon = new JLabel("*.pdf");
Icon pdfIcon = fileView.getIcon(new File("a.pdf"));
pdfLabel.setIcon(pdfIcon);

こんなコードをJTreeのレンダラに仕込めば、
JTreeのノードに対応するすべてのファイルに対して、適切なアイコンが表示される。
もちろん、Windows L&F限定だが。

FileView#getIcon(File)に指定するファイルは、存在しないとFileNotFoundExceptionが発生した。
0429デフォルトの名無しさん2007/07/06(金) 00:24:49
>>428
乙。
04304282007/07/06(金) 00:35:40
こんなレンダラでいけたよ。Metalだとみんなアイコン一緒だったけど。

public class FSTreeCellRenderer extends DefaultTreeCellRenderer {
 private FileView fileView;
 public FSTreeCellRenderer(){
  JFileChooser chooser = new JFileChooser();
  fileView = chooser.getUI().getFileView(chooser);
 }
 public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
  DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
  File file = (File) node.getUserObject();
  Component comp = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
  setText(file.getName());
  setIcon(fileView.getIcon(file));
  return comp;
 }
}
0431デフォルトの名無しさん2007/07/06(金) 00:43:17
>>428
javax.swing.filechooser.FileSystemView 使えば
Windows では 16x16のアイコンと、ファイルの種類だけは取れる。
0432デフォルトの名無しさん2007/07/06(金) 07:27:44
これは覚えておかなくては
0433デフォルトの名無しさん2007/07/06(金) 09:46:41
質問です。

Eclipseでプログラミングをしているのですが、
log4jとJCOMを外部jarとして追加しています。

この状態でjarファイルとしてプログラムをエクスポートすると、生成されたjarがそのまま実行できません。
CLASSPATHが通ってない・・・みたいなエラーが出ます。

通常のjarみたいにダブルクリックで起動させたいのですが、これはどうすれば解決できるでしょうか?
0434デフォルトの名無しさん2007/07/06(金) 10:18:12
>>433
実行可能Jarでググれ。
0435デフォルトの名無しさん2007/07/06(金) 10:33:12
>434
ググってみたんですけど、
外部Jarを使ったプログラムのエクスポート方法
などが載ってるページが見つかりませんでした。

0436デフォルトの名無しさん2007/07/06(金) 10:56:55
「実行可能Jar」でググった1番最初に見つかるが、
お前さんが使ってるGoogleは別物なんだな。
わかった。ズバリ答え。
MANIFEST.MFにこう書け。

Class-Path: log4j.jar jcom.jar

log4j.jarとjcom.jarは、実行するJarファイルと同じフォルダに置くこと。
0437デフォルトの名無しさん2007/07/06(金) 12:19:50
>>436
ありがとうございます!!
無事に実行することができました。

これで実行jarと同じ階層に3つのjarファイルがあるわけなんですが、
コレを1つのexeファイルにしたいんです。

Fat jarでまとめてexewrapでexeにする・・・というのはできるんでしょうか?
0438デフォルトの名無しさん2007/07/06(金) 15:46:00
>>437
そこまで手順が確定しているなら自分でやってみればできるかどうかすぐ分かる。
0439たかひと2007/07/06(金) 16:49:12
jspからftpサーバにファイルをアップロードするには
どのようにすればいいのでしょうか。
宜しくお願いします。
0440デフォルトの名無しさん2007/07/06(金) 17:52:31
launch4j
0441デフォルトの名無しさん2007/07/06(金) 18:05:44
log4JってWebアプリに使ってもいいですか?
スレッドとかぶつかっても平気ですか?
0442デフォルトの名無しさん2007/07/06(金) 21:19:09
log4jはスレッドセーフじゃないです。残念ながら。
まぁ日付の書式に気をつければ何の問題もないけどね。
0443デフォルトの名無しさん2007/07/06(金) 21:31:28
UDPだから負荷が重いときはデータ抜けしますよ
0444デフォルトの名無しさん2007/07/08(日) 00:53:30
http://logging.apache.org/log4j/docs/faq.html#1.7
> 1.7 Is log4j thread-safe?
> Yes, log4j is thread-safe. Log4j components are designed to be used in heavily multithreaded systems.

まことに残念
0445デフォルトの名無しさん2007/07/08(日) 01:42:28
byteとintを論理演算すると、勝手に符号拡張されるので困ってます。
例えば以下のソースで、

------------------------
int i = 0;
byte b = -1;

i = i | b;
------------------------

やりたいことは、iのビットパターンを以下のようにしたいんだけど、
00000000 00000000 00000000 11111111

実際はこうなってしまいます。
11111111 11111111 11111111 11111111

これってどうすれば回避できるんでしたっけ・・・
0446デフォルトの名無しさん2007/07/08(日) 02:00:34
スレッドに挑戦しようと思い、スレッドを含んだものを作ってみたのですが、コンパイルするときにスレッドの例外というのが発生してしまいます
単純に宣言や拡張が何か足りないだけなのでしょうか…
0447デフォルトの名無しさん2007/07/08(日) 02:02:35
コンパイルするときに例外が発生ってどゆこと
0448デフォルトの名無しさん2007/07/08(日) 02:04:26
>>445
i = i | (b & 0xFF)
0449デフォルトの名無しさん2007/07/08(日) 02:04:33
>>445
0xFF と AND でもとれば
04504452007/07/08(日) 02:10:40
>>448
>>449

ありがとうございます。できました。(; ´д`)
0451デフォルトの名無しさん2007/07/08(日) 02:16:37
i = i | (b & (byte)0xFF)
0452 2007/07/08(日) 02:59:39
Eclipseでどんなプログラムでもデバックモードで走らせると、いつも最初にTrueTypeFon.open()262行ででNullPointerExceptionが発生しています。
Eclipse3.21 JDK1.6.0_02、Windows2000SP5です。同じような症状の人いますか? 普通に実行してる分にはNullPointerExceptionは発生しないのですが。
04534522007/07/08(日) 03:01:22
どんなプログラムではありませんでした。Swingをつかうプログラムでした。
0454デフォルトの名無しさん2007/07/08(日) 03:04:30
そのぬるぽは君のプログラムからじゃなくてEclipseから発生してるもの?
0455デフォルトの名無しさん2007/07/08(日) 04:41:18
exewrapすると中身は見れないんですか?
04564522007/07/08(日) 04:44:03
自分のプログラムからだと思います。でも自分のプログラムが悪いという問題ではないと思います。
GUI(Swing)を使えば必ず出てきます。
階層的にはJFrame#initの呼び出しの果てに
Window#init(GraphicsConfiguration gc)
が呼び出されて、さらにその後もメソッドの呼び出しが続いてTrueTypeFon.open()でヌルポが発生してしまいます。

ただこのヌルポ、デバッグモードで動かさないとわかりません。
Eclipseならデバッグモードじゃなくてもヌルポが発生したらコンソールに知らせてくれるはずなのだと思いますが。
0457デフォルトの名無しさん2007/07/08(日) 07:33:33
最低限のソースを
04584522007/07/08(日) 11:06:54
public class Test {

  public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setSize(640, 400);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
  }

}
こんな単純なのでもデバッグモードで起動するとヌルポが出てしまいます。
04594522007/07/08(日) 11:10:08
最初のJFrameのコンストラクタの呼び出しの中でヌルポが発生しています。
0460デフォルトの名無しさん2007/07/08(日) 11:31:51
>>452
それでも発生するならばEclipseの実行環境(JRE)の設定でJDK1.6となっているかを確認。
さらに、プロジェクトのプロパティからコンパイルレベルが、6.0になっているかを確認
ダメならば、Eclipseを入れなおしてみる

とりあえず、そんなとこかな?
04614522007/07/08(日) 12:17:34
>>460
どうもありがとうございます。JREの設定でJDK1.6、コンパイルレベルが、6.0、ともになっています。
ちょうどEclipse3.3が出たから、アドバイスどおりEclipseを入れなおしてみます。
0462デフォルトの名無しさん2007/07/08(日) 12:23:47
>>461
3.3.1が出るまでは冒険でしょでしょ(=ω=.)

なんかプラグインが衝突しているんかねぇ
大量にプラグインいれた環境とかならば、再インスコがベストだろうな。
VEとかいれているならばかなり怪しい
0463デフォルトの名無しさん2007/07/08(日) 13:46:20
コンパイルはできているのですが実行したら
Exception in thread "main" java.lang.NoClassDefFoundError:Sample1とエラーが出ます
そこでシステム環境変数のCLASSPATHを削除したら治ったのですがこれは削除してもよかったんでしょうか?
0464デフォルトの名無しさん2007/07/08(日) 13:47:11
「.;」をわすれてね?
0465デフォルトの名無しさん2007/07/08(日) 14:04:21
javacとjavaコマンドでやっているのか?
CLASSPATHは環境変数に設定するとトラブルを誘発するので勧めない

必要な時、javaコマンドなどのオプション-cpで設定する方がいいよ
0466デフォルトの名無しさん2007/07/08(日) 14:08:51
>>465
はいそうです。
CLASSPATHの値を控えずに消してしまいました。元の状態に戻すことは不可能ですか?
0467デフォルトの名無しさん2007/07/08(日) 14:16:00
>>466
不可能
Windowsのバックアップ機能とかあるならば可能かもしれないけど、そっちは詳しくないので知らん
何度も言うけどCLASSPATHに値を設定してトラブルになるより、-cpの使い方学べ、その上でCLASSPATHに必要ならば設定汁
0468デフォルトの名無しさん2007/07/08(日) 14:23:49
>>467
そうですか・・ありがとうございました。
まあ今のところ問題なく動いているので大丈夫だと思いますが
ちなみにCLASSPATHは全くいじってませんでした。
04692人の女性と付き合っている高1です2007/07/08(日) 19:54:12
>>467
よこから割り込みますがCLASSPATHを環境変数に設定するとまずいという
ご意見がありますが、どういう時にまずいのでしょうか?

僕は現在JavaSE6up2しかマシンにインストールしていませんが、そんな
状況で起こりうる誤作動の事例をよろしければ教えてください。
0470桜井葵2007/07/08(日) 20:11:37
ビジュアルクラスを開いたら『新規ファイルをエディターに設定しよぅとしてエラーが発生しました』『java.lang.NullPointerException』って出てプログラムしか出ないんですけど、誰か助けて下さい(ノ_・。)
0471デフォルトの名無しさん2007/07/08(日) 20:46:41
>>469
CLASSPATHでググれカス
0472デフォルトの名無しさん2007/07/08(日) 20:47:50
>>469
2人とも妊娠
0473デフォルトの名無しさん2007/07/08(日) 23:43:42
ちった、役に立つかも!
↓
http://www.yukinko-net.jp/
0474デフォルトの名無しさん2007/07/09(月) 12:48:21
ど素人質問です。失礼します。
JDKを使って勉強したいのですが、
どれを使えばいいのでしょうか。
・JDK 5.0 Update 12 with NetBeans 5.5.1
・JDK 5.0 Update 9 with Java EE
・JDK 5.0 Update 12
・完全な環境と実行環境はGet the JDK download からダウンロードできます。
JDK5の次が7になっているのですが6のバージョンってないのでしょうか
0475デフォルトの名無しさん2007/07/09(月) 12:56:49
>>474
JDK 6 はあるよ。>>1のWikiサイトからたどれる。
ttp://java.sun.com/javase/ja/6/download.html
ここのJDK 6u2をダウンロードすればおけ。

with BetBeansってのは、IDEが付いてくる。
最初はエディタでやろうとしているなら、いらない。
with Java EEは、初心者なら忘れてしまってもかまわない。
0476デフォルトの名無しさん2007/07/09(月) 13:10:49
質問です。
URLConnectionでGETパラメータを送ろうとしているんですが
どの時点で送信しているのかがわかりません。

String urlString = "http://hoge.com/hogehoge.jsp?a1=test&a2=TEST";;
URL url = new URL( urlString );
URLConnection uc = url.openConnection();

DataInputStream dis = new DataInputStream( uc.getInputStream() );
String s;
while( ( s = dis.readLine() ) != null ) {
System.out.println( s );
}
dis.close();

リファレンス等を参考にするとopenConnection()で接続を確立しているらしいのですが
ここでhogehoge.jspに通信しているんでしょうか?

DataInputStream dis = new DataInputStream( uc.getInputStream() );
上の部分でhogehoge.jspに送信してそのまま受信に入っているんでしょうか?

タイミングがイマイチわからないので教えてください。
04774742007/07/09(月) 13:14:35
>>475
ありがとうございます。
後のいろいろな機能はあとから付けられるのでしょうか。
どのようにつけたらよいのでしょうか。
よろしくお願いします。
0478デフォルトの名無しさん2007/07/09(月) 14:06:21
>>477
Java EEはここから
ttp://java.sun.com/javaee/downloads/index.jsp
NetBeansはここから
ttp://www.netbeans.org/products/

後でダウンロードしてインストールできる。最初からなくても大丈夫。
0479デフォルトの名無しさん2007/07/09(月) 14:10:17
JDK6はあるはずだが・・・
0480デフォルトの名無しさん2007/07/09(月) 16:10:37
>>476
自分の書いたレスをじっくり読み直すんだ
前者以外に答えがあると思うかね
0481デフォルトの名無しさん2007/07/09(月) 16:44:22
ポップアップについての質問です
いまJPanel上を右クリックでJPopupMenuを表示するところまではできたのですが、メニューを選んだときの処理をどうすべきかわかりません。
MouseEventだとどのメニューを選んだかわからず、ポップアップにつけたJMenuItemにsetActionCommandを付けようにも、JPanelにaddActionListenerがないため、どのように識別させるのかがわかりません。
また、上の識別の問題に関連するものですが、JPanel別にメニューを付けてるのですが、大部分が重なる処理なので、呼び出し元(JPanel)を識別して、イベント処理で振り分けるということはできないでしょうか。

以上2点、お願いします。
04824812007/07/09(月) 17:01:07
書いた直後なんですが、1つ目できました
ボタン処理のようにJMenuItemごとにアクションリスナーを登録するという方法があるようで、そうするとメニュー選択時に呼ばれるようになりました。
どうも、検索したときのキーワードの範囲が広すぎたようね…
2つ目はいまだわからず、getComponentだとパネルの位置はわかるんですが、ActionCommandのように得ることはできないですかね。
0483デフォルトの名無しさん2007/07/09(月) 17:25:50
処理名称は一緒だが処理内容が異なるのなら、
(Wordなら、文字の削除とオートシェイプの削除、など)
ActionMapで振り分けるとか。

JPanel p1 = new JPanel();
p1.getActionMap().put("edit", new AbstractAction(){
 public void actionPerformed(ActionEvent e){
  // 編集時の処理
 }
};
p1.getActionMap().put("delete", new AbstractAction(){
 public void actionPerformed(ActionEvent e){
  // 削除時の処理
 }
};

のようなJPanelを用意しておいて、JPopupMenu表示時には
ActionMapからJMenuItemを組み立てる。こんな感じ
private JPopupMenu createMenu(ActionMap map){
 JPoppuMenu menu = new JPopupMenu();
 JMenuItem editItem = new JMenuItem("編集");
 if(map.get("edit") != null){
  editItem.setAction(map.get("edit"));
 } else {
  editItem.setEnable(false);
 }
 menu.add(editItem);
 // 以下略
 return menu;
}
■ このスレッドは過去ログ倉庫に格納されています