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

このエントリーをはてなブックマークに追加
>>894
JDK1.4.2のソース見たけど Component#setBounds(int,int,int,int) 呼んでる。

BorderLayout が何を呼んでサイズ調整するかは仕様で決まってないみたいなので
確実にやりたいなら setXxxxx でサイズや位置変更するメソッドを全部トラップするしか無いと思われ。
>>891
awtとswingまぜるのやめれ
『毒臭JAVA』あの本は酷かった。
春ダネエ…
900891:04/05/03 14:51
>>896
回答ありがとうございます。
とりあえずテストコードでは確かにうまく呼ばれました。
これから実際のコードに適用してみたいと思います。

>>897
やっぱりそこ突っ込まれたか…
混ぜちゃだめな理由を知らないからずっと混ぜっぱなしなんだけど…
901883:04/05/03 15:00
ごめんなさい。質問が不足していました。
勉強し始めたばかりの初心者でメモリの話とかではないです。

>>883の場合、変数nの値をメソッド内で書き換えても呼び出し側で
指定した引数には影響ないと本にありました。
で、それは引数とは別のオブジェクトを参照している為らしいの
ですが、メソッドパラメータがString型でない場合にはメソッド内で
n = new A();
の様にしなければ同じオブジェクトを参照したままだ、ともありました。
String型だけはnew演算子をつかわなくても初期化できるから、
String nの所で新しいオブジェクトが出来てるのかなぁー?
と思ったのです。
わかりづらくてすいません。
>>901
String a = "abc";
のとき
String b = a;
とやっても新しいオブジェクトが作られるわけではないのと同じ。
>>900

なんのための推奨サイズか
JFrameの上にコンポーネントを載せていってそのコンポーネントの各推奨サイズをセットして
JFrameでpackを呼ぶ

環境が異なるとwindowの境界サイズ変わるのを防ぐために必須
setsizeは自分専用アプリだとしても使っちゃいけないと思うぞ
2000とXPでもデフォルトの境界サイズ大きく違うし

ピクセル指定ではなくてこの推奨サイズを積み重ねていくのがswingの基本だ
推奨サイズ以外が使われることはまずないしな
nullレイアウトのようなピクセル指定で配置したくてもまずはjpanelをのせて
その推奨サイズを設定するべし
>>901
その本に本当にそのまま書いてあったなら、もう焚いてしまった方がいい。
君の勘違いであって欲しいが、
「String型でない場合には」なんて書いてあれば多分もう×
905初期不良:04/05/03 15:39
>>901
メソッドも代入もすべて参照渡し。
String でいじっても問題ないのは String が
内容を変更することができない immutable (不変)なクラスだから。
>>883 は作られないと言うのが答え。
その本の言い分は何かおかしい。
不変クラスだから同じクラスを参照していても問題ない。

>String nの所で新しいオブジェクトが出来てるのかなぁー?

>>902 の通り単なる代入なので参照が渡されるだけですな。
ろくでもない本を読んでるからこそ
こんなスレに行き着くのかもしれぬ
>>901
そもそも、String型はオブジェクトの内容を変更するメソッドがないので、
>>883のメソッドは意味のないものになっている。

参考 StringBuffer
void getName(StringBuffer n) {
  if(n == null){
    // エラー処理
  }

  n.setLength(0); // サイズを0で初期化
  n.append("abc"); // ここで名前を設定
}
>>905
揚げ足取るようで悪いけど参照渡しではないよ。

C++なんかの「いわゆる」参照渡しでは
void hoge(Foo &foo) {
  foo = bar;
}
とやると呼び出しもとのオブジェクト自体が変わっちゃうけどJavaで
void hoge(Foo foo) {
  foo = bar;
}
とやっても呼び出しもとには影響しない。
>>907
getName という名前のメソッドで set するあなたの良識を疑う
>>909
そもそも元投稿の803がvoid getName(String s)なんて書いてたから
それで説明しているのでしょう
英小文字「a」はアスキーコードでは10進数の97ですが、
ではint型の値97からString型の値aに変換するには
どうしたら良いでしょうか?
どなたかお知恵を貸して下さいませ。
「参照渡し」かどうかをこのスレで話すときは、
それが何なのかを定義してからじゃないとだめかも。

「Cで言うところの参照渡し」、とか、
「オブジェクトへの参照がコピーされて渡される、という意味での参照渡し」とか。。

(ポインタあるなし議論も同じ。)
↑ですが解決しました。
char c = 97;
String.valueOf(c);
くだらない質問してすみません。
914初期不良:04/05/03 16:49
>>908
ああ、確かにそういう意味では参照渡しじゃないね。
参照をコピーしているのは参照渡しとは言わない方がいいのかも?
参照を値渡し。
なんか過去mlで見た流れだな
917891:04/05/03 18:27
>>903
903さんがSwingのレイアウト手法を学んだページor本を紹介してもらえませんか?
ふつーにSwing触っていればわかるようなもんだが?

まぁswingさわり始めたときは1.1のころでオプションのときだったから
地道にやっていればわかるだけ

pack使っていないコードみたらまず糞だと思えばいい
919デフォルトの名無しさん:04/05/03 22:01
URLエンコードのことなんだけど。
googleでShift_JISだと「日付」は「%93%FA%95t」になってるんだけど、
 URLDecoder.decode("%93%FA%95t","Shift_JIS");
で文字化けしてしまう。
どうしたらうまくデコードできるんだろうか。
>>898 なんでよ?
UTF-8じゃねーの?
googleはデフォutf8だぞ
923デフォルトの名無しさん:04/05/03 22:12
 URLDecoder.decode("%93%FA%95%74","Shift_JIS");
はちゃんと「日付」になる。
924デフォルトの名無しさん:04/05/03 22:18
参考までに
ttp://www.google.com/search?q=%93%FA%95t&ie=shift_jis

ようするに最後の%74がtになってるのが問題のようだ。
結局tとかを%74に変換するような処理を書いた。
スマートな方法ってないのかなぁ
URLEncoderとセットで使うものかと
つまりRefererの解析なんかには使えない、ということ?
Refererは偽装してナンボ
どこに責任があるのでせう?
930デフォルトの名無しさん:04/05/04 00:14
java3Dで作った3Dポリゴンをブラウザで表示してHPに載せたいんですが
そんなことってできますか?
キャプチャーしてJPEGにでもすれば?
932デフォルトの名無しさん:04/05/04 00:18
いきなりですが、ポリモーフィズムを実現するためにプログラムつくってるんですが。
プログラム自体をつくるのに手間取っています。どうか語慈悲を・・。

エラー文
FoodCaller.java:9: 変数 f は初期化されていない可能性があります。
String name = f.getName();
^

FoodCaller.java
public class FoodCaller {
public static void main (String args[]) {
Food f;
if (args[0].equals("banana")) {
f = new Banana();
} else if(args[0].equals("apple")) {
f = new Apple();
}
String name = f.getName();
}
}

Food.java
public class Food {
public String getName(){
return "Food";
}
}

933デフォルトの名無しさん:04/05/04 00:18
追加

Apple.java
public class Apple extends Food{
public String getName() {
return "Apple";
}
}

Banana.java
public class Banana extends Food{
public String getName() {
return "Banana";
}
}
>>929
URLエンコードって仕様決まってるでしょう?
javadocからもリンクがある。http://www.w3.org/TR/html4/
どっちが間違ってるかは、、知らん。

>>930
クライアントサイドにjava3Dがないと無理。
webstartにまるごとぶちこむとか。
https://jogl-demos.dev.java.net/
ここのページがJOGLでそういうかんじのことをやってる。
>>932
こういう場合は
Food f;
のところ
Food f = null;
じゃない?
936930:04/05/04 00:37
>>934
やっぱだめですか・・・
前どっかのサイトでジャバで作られたゲームがブラウザ上で
遊べるサイトがあったのを見てjava3Dと勘違いしちゃったみたいです・・・。
あれはjava3Dじゃなくてjavaアプレットとかいうやつですか?
>>932
args[0] が "orange" だった場合を考えてみよう。
>>935
それは最悪のやり方。
>>932
コンパイラは、
「args[0]が"banana"でも"apple"でも無い場合fに値が入らないのでまずいよ」
と怒っているのです。選択肢は3つ。

1. Food f = nullとして、nullで初期化。
とりあえずコンパイルエラーは消えますが、当然ながら実行時にぬるぽが起きます。

2. Food f = new Food()として、Foodオブジェクトで初期化。
コンパイルエラーは消え、実行時にぬるぽも起きません。
Foodオブジェクトが1つ無駄になるのがいやーんな感じですが。

3. else を追加し、そこでFoodオブジェクトを生成。
コンパイルエラーは消え、実行時にぬるぽも起きず、
Foodオブジェクトが無駄になることもありません。

エラーとは関係ないですが、抽象クラスになりそうなFoodクラスを
インスタンス化できるのが変な感じですね。
Null Objectパターンを適用してNullFoodクラスを定義したらどうでしょう?
abstract public class Food{
 abstract public String getName();
}

public class NullFood extends Food{
 public String getName(){
  return "";
 }
}
if (args[0].equals("banana")) {
f = new Banana();
} else if(args[0].equals("apple")) {
f = new Apple();
} else return;
941デフォルトの名無しさん:04/05/04 01:02
939さんの3で解決させてもらいました。
しかし、この自分が持ってるテキストの説明のプログラム・・・。
嘘ばっかりだな。
>>941
次の被害者を出さないためにそのテキストのタイトル晒しキボン。
>>934
ぐぐってみた。
ASCII以外は知ったこっちゃない、って仕様みたい。
問題の箇所が decode 側だけなら融通が利くように自作して後は見なかった事にする、べきかな?

http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/forms.html#h-17.13.4.1
http://www.mars.dti.ne.jp/~torao/rfc/rfc1738-ja.txt
>>940
それだったら throw new IllegalArgumentException(args[0]); とかしたほーが。
>>944
漏れも例外投げるのが一番普通かと思ってしまったが。