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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/08/21(日) 02:46:50
過去ログ、関連スレッド、よくある質問とその回答、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/

これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。

以下のエラーが表示されて、途方にくれているあなたは、下のページへ。
「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
http://www.wikiroom.com/java/?path,classpath

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

/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */

また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。

JavaScriptの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc5.2ch.net/hp/

次スレは>>980あたりでお願いしまする。
0002デフォルトの名無しさん2005/08/21(日) 02:49:38
乙
0003前すれ9112005/08/21(日) 02:50:25
斜めも入れたらよさげになりますた。
public void outLine(String s, int x, int y, Color c, Graphics g){
Color hoge = g.getColor();

g.setColor(c);
g.drawString(s, x+1, y);
g.drawString(s, x+1, y+1);
g.drawString(s, x+1, y-1);

g.drawString(s, x-1, y);
g.drawString(s, x-1, y+1);
g.drawString(s, x-1, y-1);

g.drawString(s, x, y+1);
g.drawString(s, x, y-1);

g.setColor(hoge);
g.drawString(s, x, y);
}
0004デフォルトの名無しさん2005/08/21(日) 02:50:26
で、どうなった?
0005デフォルトの名無しさん2005/08/21(日) 02:57:59
うれしいか?
>>前すれ911
0006デフォルトの名無しさん2005/08/21(日) 08:11:18
JInternalFrame の中に JToolBar を入れて、ツールバーをフローティングさせた
まま内部フレームを dispose() したらツールバーの小ウィンドウだけ残ってしまった。
これって消すためにわざわざ InternalFrameListener 仕掛けなきゃだめか?
消し方は setVisible(false) で良いのか?
0007デフォルトの名無しさん2005/08/21(日) 08:38:06
あの、署名付きアップレットを作って、ローカルリソースにアクセスできる状態だとします。
その状態では、クラスローダーで独自クラスのロードとかもできたりするものでしょうか?
というか、署名付きアップレットとはどこまでの権限が得られるものなのでしょうか。
教えて下さい。また、参考になるサイトがありましたら誘導よろです(意外と適当なサイトが見つからない・・・・)。
0008デフォルトの名無しさん2005/08/21(日) 08:58:12
>>7
公式見れば一発です
0009デフォルトの名無しさん2005/08/21(日) 10:41:30
>>8
あの、公式サイトのアップレットに関する文書の場所教えて下さい。
なぜか見つからないんです・・・・・・・。よろしくおねがいします。
0010デフォルトの名無しさん2005/08/21(日) 12:03:01
ひょっとして、英語ページにしかないとか?
0011デフォルトの名無しさん2005/08/21(日) 12:10:28
>>9
>>8じゃないので、これが求めるものか知らないけど、これとかは?
http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/plugin/developer_guide/contents.html
0012デフォルトの名無しさん2005/08/21(日) 13:01:06
SDK1.3じゃないと正常に動かないアプリを動かしたいのですが、
通常1.4のパスが通ってます。
そのつど1.4のパスを消して、1.3にパスを通さないといけないのでしょうか。
0013デフォルトの名無しさん2005/08/21(日) 13:05:56
>>12
絶対パスで java コマンドを動かせばいいのでは?
0014デフォルトの名無しさん2005/08/21(日) 13:47:50
ファイルのimport/exportについて教えてください。
tomcat+eclipseでサーブレットを使ったWEBシステムを作ってるんですが、
propertiesファイルやxmlファイルを思ったように読んでくれないんです。

今以下のようにファイルを置いてるんですが、
eclipseディレクトリの直下にファイルを置かないと
動いてくれないし、ログもeclipse直下にしか出してくれないんです。
これをアプリのディレクトリのWEB-INF/classesに出すにはどうしたらいいでしょうか?
何かそれをいじる設定ファイルとかってあるんでしょうか?
0015142005/08/21(日) 13:48:42
アプリは以下のように置いてます。

eclipse
  ├─classA-log
  ├─log4j.xml←ここに置かないとエラーが出る
  ├─info.properties←ここに置かないと読んでくれない
 workspace
  │
 system
  ├─jsp
  │ ├─jspA.jsp
  │ └─jspB.jsp
  ├─works
  ├─WEB-INF
  │ ├─classes
  │ │ ├─classA.class
  │ │ ├─etc
  │ │ │
  │ │ ├─info.properties←ここに置きたい
  │ │ └─log4j.xml←ここだけに置きたい
  │ ├─lib
  │ │ ├─log4j-1.2.11.jar
 │ │ ├─etc
 │ └─src
  │ ├─classA.java
  │ ├─etc
 │
  ├─index.html
 └─works
0016142005/08/21(日) 13:50:42
で、classAというのはこんな感じで作っていて、
import org.apache.log4j.*;
(略)
public class classA {
 public String exec(String ID,String PW){
  DOMConfigurator.configure("log4j.xml");
  Logger log = Logger.getLogger(classA.class.getName());
  (処理)
  return result;
 }
}

ブラウザから実行するとコンソールにこんなログを出します。
log4j:ERROR Could not open [log4j.xml].
java.io.FileNotFoundException: log4j.xml (指定されたファイルが見つかりません。)
0017デフォルトの名無しさん2005/08/21(日) 13:52:08
log4jの中身はこんな感じです。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>;
<appender name="classA" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="classA-log" /><param name="DatePattern" value="'.'yyyy-MM-dd"/>
<param name="threshold" value="INFO"/><param name="append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy/MM/dd HH:mm:ss},%p,%m%n" />
</layout>
</appender>
<appender name="System" class="org.apache.log4j.DailyRollingFileAppender" >
<param name="file" value="sys-log" /><param name="DatePattern" value="'.'yyyy-MM-dd"/>
<param name="threshold" value="ERROR"/><param name="append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss},%p [%t] %c (%F:%L) %m%n" />
</layout>
</appender>
<logger name="util.classA">
<level value="info" />
<appender-ref ref="classA"/>
</logger>
<root>
<level value="error" />
<appender-ref ref="System" />
</root>
</log4j:configuration>
0018デフォルトの名無しさん2005/08/21(日) 14:56:19
>>11
おおお、これっぽいです。
d(゚Д゚)☆スペシャルサンクス☆( ゚Д゚)b 。
0019デフォルトの名無しさん2005/08/21(日) 16:55:47
あの、Java VMのメモリ領域(本当はいろいろな区分があるけど気にせずに)
を丸ごとコピーして、違うPCのVMで動作を再開させる(プロビジョニングとか言うらしい)って
なことは実現できるかな?ネイティブコード使ってVMからデータを持ってきてもOK。
ただVMに手を加えることはしたくない。どうでしょう?
関連情報でもいいのでキボンヽ(´ー` )ノ
0020デフォルトの名無しさん2005/08/21(日) 17:47:41
>>17

javaっつーかプログラム初心者なんで微妙なんだけど、log4j.xmlは
 DOMConfigurator.configure("log4j.xml");
ってやるとclassAのフォルダ内の「log4j.xml」を読みに行くことになるんじゃないか?
だからそこにファイルがなければ、NotFoundになると思うんだが。
log4j.xmlのところをしっかりとした相対パスか、絶対パスにすればなんとかなるかもしんない。
./workspace/log4j.xml にすればworkspace内のファイル読むんじゃないかな。
最終手段で絶対パスでしょ。

info.propertiesはやったことなくて分からんです。
0021202005/08/21(日) 17:51:12
ごめん読み間違えた。
パスに問題がありそうだけど、内容まちがっとる・・・orz
0022デフォルトの名無しさん2005/08/21(日) 18:09:04
Javaの.net環境へのコンパイラってありますか?
0023デフォルトの名無しさん2005/08/21(日) 18:18:40
IKVM.NETってのがある
0024デフォルトの名無しさん2005/08/21(日) 18:35:26
>>23
ん、これはどうやら.netの上にVMを起動して〜みたいな感じのようですね。
単純に.net用のバイトコード(って言うのか知らないけど)にコンパイルする
ことはできるものはありませんかね〜
0025デフォルトの名無しさん2005/08/21(日) 18:50:48
>>24
それもできるってば・・・もっとよく調べてみろ。
0026GiantLeaves ◆6fN.Sojv5w 2005/08/21(日) 18:53:02
【質問】
JavaVMはIEXPLORER, Sun Javaの他に何がありますか?
また、Java Applet の作り方を教えてください。
それと、アプレットではない方のJavaは何か特別な呼び方があるのでしょうか?
JREとは何ですか?
0027デフォルトの名無しさん2005/08/21(日) 19:03:08
>>26
> JavaVMはIEXPLORER, Sun Javaの他に何がありますか?

列挙できないほどたくさんあります。

> また、Java Applet の作り方を教えてください。

書籍を購入して学習することをオススメします。

> それと、アプレットではない方のJavaは何か特別な呼び方があるのでしょうか?

あります。

> JREとは何ですか?

Java Runtime Environment の略語です。
0028デフォルトの名無しさん2005/08/21(日) 19:12:20
数学板のコテか。
0029デフォルトの名無しさん2005/08/21(日) 19:19:48
IBMのJREを個人情報なしでDLできませんか?
0030デフォルトの名無しさん2005/08/21(日) 19:22:45
>>29
WebSphere Application Server のお試し版でもダウンロードすれば入ってるんじゃ
0031デフォルトの名無しさん2005/08/21(日) 19:25:08
>>30
お試し版DLでも入力求められるよ

おれなんか会社名適当に入力したら折り返し連絡が来て
「正確な情報をお願いします」とか連絡が来たよ
0032デフォルトの名無しさん2005/08/21(日) 19:31:42
SUNはハード屋だから(プゲラ って言ってるわりにはケチだね
0033GiantLeaves ◆6fN.Sojv5w 2005/08/21(日) 19:56:34
talk:>>27 役に立たない奴め。自分でサイトを見つけてきたぞ。http://java.sun.com/j2se/1.5.0/ja/docs/ja/index.html
0034デフォルトの名無しさん2005/08/21(日) 20:34:23
すぐに調べて分かることを聞くあふぉがまたでたか
0035デフォルトの名無しさん2005/08/21(日) 20:56:03
無礼すぎ。
自分でサイトを見つけてきた事を、自慢できるほど Google は難しくない。
0036デフォルトの名無しさん2005/08/21(日) 21:00:32
つたない日本語乙
0037142005/08/21(日) 21:33:34
>>20

確かにコンパイルのときはWEB-INF/classes(classAがあるところ)を
見に行ってくれてるんですが、
WEBからアプリ実行させるときは
eclipse直下にファイルがないと怒られるんですよ。
(propertiesファイルも同じ)

classesの下のファイルだけ読みに行ってくれるように
したいんですけど、どこで設定すればいいんでしょう?
0038デフォルトの名無しさん2005/08/21(日) 21:46:41
>>14,37
初期化サーブレットを書くことをお勧めする。
でその中でweb.xmlにlog4j.xmlの場所を書いてやるようにすればいい。

ちょっと探したらすぐ出てきたぞ
http://www.ingrid.org/jajakarta/log4j/jakarta-log4j-1.1.3/docs-ja/manual.html

0039GiantLeaves ◆6fN.Sojv5w 2005/08/21(日) 22:00:28
talk:>>34-35
いいからJavaVMをとっとと教えろ!
ちなみにIExplorer, Sun Java, Hot Java以外にだぞ。
どうもJavaVMはスタンバイから復帰したときにシステムの不調をきたす場合があるのでな。
0040デフォルトの名無しさん2005/08/21(日) 22:03:51
VMの意味が分かってないように見えるが釣りだろうな

スタンバイから何度も復帰させてるが問題起こってねーよ
0041デフォルトの名無しさん2005/08/21(日) 22:07:56
Tomcat5.5.9について質問があります。

Windows2000ProSP4
j2sdk1.5.0_04
Tomcat5.5.9
を使用してローカルの開発環境を作っています。

JDKをインストールしてJAVA_HOMEを設定。
Tomcat5.5.9のZIPファイルを解答してCATALINA_HOMEを設定。

CATALINA_HOME\binのstartup.batを叩いて起動させると、
コンソールに『XML検証は無効です』と出力されます。
しかし、そのままエラーなどは出ずに起動され、
http://localhost:8080にアクセスすると正常に表示されます。

ググってみましたが、同様のエラーメッセージが出てる場合、起動にも失敗してるみたいですし、
解答でもserver.xmlでは?というものでしたが、
server.xmlは全く弄っていませんし、起動自体も成功しています。

何か問題があるのでしょうか?
0042デフォルトの名無しさん2005/08/21(日) 22:12:27
>>41
DDL非検証モードですという意味では?
0043デフォルトの名無しさん2005/08/21(日) 22:17:18
   ∩___∩       |            , '´l,
   | ノ\     ヽ      |         , -─-'- 、i
  /  ●゛  ● |      |       _, '´ /     ヽ、
  | ∪  ( _●_) ミ     j     iニニ, "● ∪    ヽ、
 彡、   |∪|   |    >>39    iニニ、_          ',
/     ∩ノ ⊃  ヽ            〈`'ー;==ヽ、〈ー- 、 !
(  \ / _ノ |  |             `ー´    ヽi`ヽ iノ
.\ “  /__|  |                      ! /
  \ /___ /                    r'´、ヽ
                               `´ヽノ
0044GiantLeaves ◆6fN.Sojv5w 2005/08/21(日) 22:25:40
talk:>>40 ということは、そのときはたまたまスタンバイのときに大量のデータが生成されたか、大量の計算が発生したのか?
0045デフォルトの名無しさん2005/08/21(日) 22:27:54
>>44
すごいバカがいますよ
0046デフォルトの名無しさん2005/08/21(日) 22:28:36
>>38

サンクス!ちょっと調べてみますね。
サーブレットのコンストラクタでやるんですか・・・
JSF使ってるけど大丈夫かな
0047デフォルトの名無しさん2005/08/21(日) 22:29:56
わざわざトリ付けて頭の悪さを晒すのってスゴイな
0048デフォルトの名無しさん2005/08/21(日) 22:31:03
頭が悪いからな。
0049デフォルトの名無しさん2005/08/21(日) 22:33:36
http://www.google.co.jp/search?sourceid=navclient&ie=UTF-8&rls=GGLD,GGLD:2005-04,GGLD:en&q=GiantLeaves+%E2%97%866fN%2ESojv5w
0050デフォルトの名無しさん2005/08/21(日) 22:38:07
>>49
鬼の首でも取ったかのごとく「シュミレーション」にツッコミ入れてるが
思いっきり >>1 の思惑通りに釣られてるあたりクオリティが高い
0051デフォルトの名無しさん2005/08/21(日) 22:53:23
>>46
全く問題ない。
0052デフォルトの名無しさん2005/08/21(日) 23:02:54
>>44
きっと頭はいいのでしょうが、もう少しその頭の使い方を覚えたほうがいい
のでは?
今のままではただのキ○ガイ。
0053デフォルトの名無しさん2005/08/21(日) 23:55:31
なんで頭いいと思うんだ?普通にバカだろ。
0054デフォルトの名無しさん2005/08/21(日) 23:56:59
>>53
ヒント:皮肉
0055デフォルトの名無しさん2005/08/22(月) 00:34:15
ヒント:精一杯のやさしさ
0056デフォルトの名無しさん2005/08/22(月) 00:39:51
JFileChooserでユーザーが指定したディレクトリのパスをString戻すにはどの用にすればよいでしょうか?
0057デフォルトの名無しさん2005/08/22(月) 00:42:44
失礼。。。
「Stringで戻すには」でした。
よろしくお願いします。
0058デフォルトの名無しさん2005/08/22(月) 01:01:09
File#getPath()とかFile#getAbsolutePath()
でしょうか?
0059デフォルトの名無しさん2005/08/22(月) 01:26:55
>>58
ファイルチューザーの設定の時点で悩んでます。
ディレクトリ(ファイルではなく)を指定する方法がわかりません。
public String getPath(){
   setDialogType(JFileChooser.SAVE_DIALOG);
   int i =showSaveDialog(null);
   return getSelectDirectory();
} 
とすればできると思ったのですが、ディレクトリを選択しても、「開いて内容を表示する」だけで、
キャンセルを押してもダイアログを閉じることができずに強制終了するしかない状態になってしまいます。
0060デフォルトの名無しさん2005/08/22(月) 01:29:01
JApplet で JFileChooserを使うにはどのようにすればよいのでしょうか?
環境はWinXP
J2SDK1.4.2

 「開く」ボタンをつけて、押したらファイル「gif」と「jpg」を選べるようにしたいだけなのですが、
ボタンのアクションを拾ってJFileChooserを起動しようと思っているのですが
appletだとどうやればいいのか見当が付かず困っています。

どなたかわかるかたいらっしゃらないでしょうか


import javax.swing.JApplet;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;

public class TestFileFilter extends JApplet{
public void init()
{
JFileChooser chooser = new JFileChooser(".");
ExampleFileFilter filter = new ExampleFileFilter();
filter.addExtension("jpg");
filter.addExtension("gif");
filter.setDescription("jpg,gif");
chooser.setFileFilter(filter);
}
}
0061デフォルトの名無しさん2005/08/22(月) 02:22:49
>>59
これだよこれ。
setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY)
0062デフォルトの名無しさん2005/08/22(月) 02:25:18
>>60
JFileChooser のインスタンスはクラス変数に入れておいて
ボタンの ActionListener で出せばいい。
0063デフォルトの名無しさん2005/08/22(月) 03:00:52
おおおおおお!!>>61さん、どうもありがとうございました。
0064デフォルトの名無しさん2005/08/22(月) 11:23:57
>>60
サンドボックス内だとファイル選択ができないけど
WebStartならJNLPAPIでできる
0065GiantLeaves ◆6fN.Sojv5w 2005/08/22(月) 13:25:19
talk:>>45,>>47-48 どこだよ?
talk:>>49-50 いいから趣味で食べるレーションを私に支給してくれ。
talk:>>52-55 お前に何が分かるというのか?
0066デフォルトの名無しさん2005/08/22(月) 13:51:52
>>65
巣に帰れよ
0067デフォルトの名無しさん2005/08/22(月) 14:57:58
Executable Jarファイルを作りたいと思っています。
環境にエクリプスを用い、メインのプロジェクトは他に作ってあるプロジェクトの参照を行っています。
この場合どのようにすれば実際に動かせるようになるのでしょうか?

試したこと:
 ・エクスポート→jarファイル でエクスポートするプロジェクトで両方指定
 ・参照プロジェクトのjar化→マニフェストのクラスパスで指定  
結果両方とも動きませんでした。 
0068デフォルトの名無しさん2005/08/22(月) 15:08:56
>動きませんでした。
釣りケテーイ
0069672005/08/22(月) 15:31:08
>>68
・・・・つりじゃないです。。。
ダブルクリックするとマウスポインタは一応作業中になるのですが、
何も起こらずに元に戻っちゃいます。
アプレットみたいにタスクバーにコンソールが表示されるわけでもなく
何が悪いのかまったく原因がわかりません。
0070デフォルトの名無しさん2005/08/22(月) 15:45:56
そりゃ何か設定が間違っているんだろう。
0071デフォルトの名無しさん2005/08/22(月) 15:48:54
どのような動作を期待していて、どのような動作をしたから期待通りでは無かったのか。
コンソールからは実行できるのか。
OSは?
JDKは?
0072デフォルトの名無しさん2005/08/22(月) 16:03:41
>>69
「どのように動かないのか」を書かないとまともな回答は得られないよ。

他の参照プロジェクトもJar化する。
動かしたいプロジェクトもJar化してそちらのマニフェストファイルに
クラスパスを設定し、他のプロジェクトのJarをクラスパスに含める。
・・・でうまくいくんじゃね?
0073デフォルトの名無しさん2005/08/22(月) 16:16:46
>>67
実行可能jarをダブルクリックだと、標準エラー出力に出るエラーが見えないので、原因がわからない。
まずはコマンドラインから実行して、原因を調べよう。こんな感じで。

java -jar hoge.jar
0074デフォルトの名無しさん2005/08/22(月) 16:51:11
本で読んだところ
System.currentTimeMillisはWindowsだけ
1ずつ増えないそうで
つまり、MSが改善すれば
Javaは精密な動作を実現できるということ?
0075デフォルトの名無しさん2005/08/22(月) 17:26:52
ジャバーはアホなのでいつも
catch(Exception ex){
  System.err.println(ex);
}
ちゃんとエラー処理しろよ
0076デフォルトの名無しさん2005/08/22(月) 18:04:27
>>74
WindowsというかOSによって変わるな
同じWindowsでも95,98やnt4,2000とxpすべて動作がばらばら

それにCPU・・・かチップセットによっても動作が大きく変わるの確認済みなんだが
あれもなんとかならんのかね
インテル系は今のはきっちりかえしてるっぽい
AMDは古いのはちゃんとかえしてるっぽいが新しいのはダメとか

逆にLinux等Windows以外はナノタイム取得はちゃんと動いてないっぽいけどな
0077672005/08/22(月) 18:27:02
>>73
Exception in thread "main" java.lang.NoClassDefFoundError: org/exolab/castor/xml
/MarshalException
at MainBDIV.main(MainBDIV.java:16)
外部Jarのクラスが見つからない???・・・・クラスパスは通してあるのになんで???
0078デフォルトの名無しさん2005/08/22(月) 18:39:12
>>77
java -verbose:class -jar hoge.jar で良く考える
0079デフォルトの名無しさん2005/08/22(月) 19:22:19
JPanelのFPSを保つまた表示するにはどうすればいいでしょうか。
0080デフォルトの名無しさん2005/08/22(月) 19:24:27
frames per second?
0081デフォルトの名無しさん2005/08/22(月) 19:25:03
yes
0082デフォルトの名無しさん2005/08/22(月) 19:45:52
SwingSet2デモのソースを見ると、frame数を数えて計算してるねぇ。
(Surface.javaのLogPerformanceメソッド)
0083デフォルトの名無しさん2005/08/22(月) 19:46:42
SwingSet2じゃないや、Java2Dデモ。
どっちもSDKに入ってる。
0084デフォルトの名無しさん2005/08/22(月) 19:49:23
JavaでWindowsだと厳密には無理
Java.util.Timer#scheduleAtFixedRate
使うのが一番楽だった。
0085デフォルトの名無しさん2005/08/22(月) 20:12:42
>>77
こういうこと。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/windows/java.html#options
ここの-jarオプションの説明を参照。

対策は、「Java 実行可能 jar」あたりでググれば見つかる。
0086デフォルトの名無しさん2005/08/22(月) 20:38:20
JTree のノードのラベルを動的に変更しています。表示の更新はちゃんと行われている
ようですが、文字列が長くなったときに後ろが省略されて「...」となってしまいます。
なんか幅が変わってないようですが、全体を表示させるにはどうしたら良いでしょうか?
treeNodesChanged() だけでなく treeStructureChanged() イベントも飛ばして見ましたが
変わりませんでした。

ちょうど以下のページのような感じ
http://www.javadrive.jp/tutorial/jtree/index2.html
> 恐らく表示する幅が変わっていないため、画像の分だけ文字を表示する幅が少なくなって、
> 「...」のような省略形になってしまっています。原因が今のところわかりません。
0087デフォルトの名無しさん2005/08/22(月) 21:02:21
その参考サイトもいいかげんだな
「...」になる理由が分かりませんとは

ノードの変更をtreemodelに通知してないからかと

変更部分のコードをさらしてみ
0088デフォルトの名無しさん2005/08/22(月) 22:14:47
以下のことがしたいです。
1.Javaプログラムからブラウザを起動
2.その開いたブラウザを閉じる

1はProcessBuilderでできるとして、ブラウザを閉じるというのは
プログラムからできるのでしょうか?
0089GiantLeaves ◆6fN.Sojv5w 2005/08/22(月) 22:16:45
talk:>>88 プロセスの終了とか?
0090GiantLeaves ◆6fN.Sojv5w 2005/08/22(月) 22:20:14
talk:>>88
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/ProcessBuilder.html
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/Process.html
0091デフォルトの名無しさん2005/08/22(月) 22:20:52
>>87
TreeModel 実装してるので全部載せたらでかいから、TreeModel のイベント通知部分だけ。
ノードとなる Bean のプロパティ変更通知を受け取って TreeModelEvent として配信する
TreeModel を JTree に使用している。nodeLabel プロパティの変更通知が来て画面上も
変更されるのは確認済みです。

if(propertyName.equals("leafNode") || propertyName.equals("nodeIcon")
|| propertyName.equals("openNodeIcon") || propertyName.equals("nodeLabel")){
  TreeModelEvent e = getTreeModelEvent(evt);
  for(int i=0; i<listener.size(); i++){
    ((TreeModelListener)listener.get(i)).treeNodesChanged(e);
  }
}

treeNodeChanged() の直前に println() 入れてみましたが nodeLabel 変更時の通知は
意図したように行われています。getTreeModelEvent(evt) は Bean からのイベントを
TreeModelEvent に変換しています。必要であればこちらも載せますが。
0092デフォルトの名無しさん2005/08/22(月) 22:22:20
>>88
Process#destroy()

まぁ gracefully な終了のさせ方じゃないが。
0093デフォルトの名無しさん2005/08/22(月) 22:37:47
>>91
いや、イベント通知ってへんなのやる必要はないよ
ノードのオブジェクトの変更部分のせてみそということだったのだが
0094デフォルトの名無しさん2005/08/22(月) 22:58:47
jniでWM_CLOSE送ればええやん
0095デフォルトの名無しさん2005/08/22(月) 23:11:33
>>93
TreeModel インターフェースを独自に実装してるから、ノードのオブジェクトに相当するものって
ただの Bean なんだけど。変更部分って setter のこと?

public void setNodeLabel(String nodeLabel){
  Object oldValue = this.nodeLabel;
  Object newValue = nodeLabel;
  this.nodeLabel = nodeLabel;
  firePropertyChange("nodeLabel", oldValue, newValue);
  return;
}

イベントは以下のように伝わっています。

Bean
 ↓ <プロパティ変更イベント>
TreeModel の実装クラス
 ↓ <TreeModel イベント>
JTree

ちなみに TreeCellRenderer は DefaultTreeCellRenderer を継承して以下のように作成しています。

public Component getTreeCellRendererComponent(JTree tree, Object value, ...){
  DataNode node = (DataNode)value;
  super.getTreeCellRendererComponent(tree, node.getNodeLabel(), sel, expanded, leaf, row, hasFocus);
  this.setIcon(node.getNodeIcon());
  return this;
}
0096デフォルトの名無しさん2005/08/22(月) 23:26:48
アプレットの質問です。

ラベルを使っているアプレットなんですが、手前に画像を表示しようとすると、
ラベルを貼った場所だけ一番手前に出て見えてしまいます。
ラベルと画像が重なった時にラベルを隠すようにしたいのですが、それは可能ですか?
もし可能なら方法を教えてくれると助かります。

こゆ質問でもソースとかうpした方が良ければ、指摘してください。
0097デフォルトの名無しさん2005/08/22(月) 23:29:44
レンダラは関係ないし難しく考えすぎ

model.valueForPathChanged(path,"あいうえおかきくけこ");

を使うか

root.setUserObject("あいうえおかきくけこ");
model.nodeChanged(root);

だけでいい

なんでJTreeつかってuserObjectがでてこないのかなぁとおもった
0098デフォルトの名無しさん2005/08/22(月) 23:32:16
補足
modelはツリーモデル
pathはツリーパス
rootはルートをさすツリーノード(別にルートである必要もないがテストにルートはらくだから)
"あいうえお"はユーザーオブジェクトのさんぷる

デフォでtoStringの内容を使うというSwingの特徴を考えるとStringはやはり楽だからね
0099デフォルトの名無しさん2005/08/22(月) 23:46:06
>>97
ええとですね、DefaultTreeModel や DefaultMutableTreeNode は使っていません。
独自のデータモデル用に TreeModel と TreeCellRenderer を自作してイベント処理含めて
自分でやっています。

ですが >>86 のページのように、それらを使った場合と同じような感じになっているので、
自作云々というよりデフォルトのものを使ってる JTree か DefaultTreeCelLRenderer かなーと
推測しています。
0100デフォルトの名無しさん2005/08/23(火) 00:04:32
defaultなんちゃらをベースに拡張してないのね
初心者っぽいから無理しなけりゃいいのに

valueForPathChangedの実装部分が怪しいと予想
0101デフォルトの名無しさん2005/08/23(火) 00:35:47
>>100
valueForPathChanged は GUI 上の変更 (JTree 上での TreeCellEditor 経由での変更) が
TreeModel 側に通知される時に呼び出されるものなので無関係と思います。そもそも今回は
呼ばれていません。

いやもう、最初のレスから勘違い君だと思ってたが。
Defaultなんちゃらしか使ったことないならもう無理スンナw
■ このスレッドは過去ログ倉庫に格納されています