>>894 JDK1.4.2のソース見たけど Component#setBounds(int,int,int,int) 呼んでる。
BorderLayout が何を呼んでサイズ調整するかは仕様で決まってないみたいなので
確実にやりたいなら setXxxxx でサイズや位置変更するメソッドを全部トラップするしか無いと思われ。
『毒臭JAVA』あの本は酷かった。
春ダネエ…
>>896 回答ありがとうございます。
とりあえずテストコードでは確かにうまく呼ばれました。
これから実際のコードに適用してみたいと思います。
>>897 やっぱりそこ突っ込まれたか…
混ぜちゃだめな理由を知らないからずっと混ぜっぱなしなんだけど…
ごめんなさい。質問が不足していました。
勉強し始めたばかりの初心者でメモリの話とかではないです。
>>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型でない場合には」なんて書いてあれば多分もう×
>>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);
くだらない質問してすみません。
>>908 ああ、確かにそういう意味では参照渡しじゃないね。
参照をコピーしているのは参照渡しとは言わない方がいいのかも?
参照を値渡し。
なんか過去mlで見た流れだな
>>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");
で文字化けしてしまう。
どうしたらうまくデコードできるんだろうか。
UTF-8じゃねーの?
googleはデフォutf8だぞ
923 :
デフォルトの名無しさん:04/05/03 22:12
URLDecoder.decode("%93%FA%95%74","Shift_JIS");
はちゃんと「日付」になる。
924 :
デフォルトの名無しさん:04/05/03 22:18
結局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";
}
}
>>932 こういう場合は
Food f;
のところ
Food f = null;
じゃない?
>>934 やっぱだめですか・・・
前どっかのサイトでジャバで作られたゲームがブラウザ上で
遊べるサイトがあったのを見てjava3Dと勘違いしちゃったみたいです・・・。
あれはjava3Dじゃなくてjavaアプレットとかいうやつですか?
>>932 args[0] が "orange" だった場合を考えてみよう。
>>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 次の被害者を出さないためにそのテキストのタイトル晒しキボン。
>>940 それだったら throw new IllegalArgumentException(args[0]); とかしたほーが。
>>944 漏れも例外投げるのが一番普通かと思ってしまったが。