トップページ⇒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あたりで。
0728デフォルトの名無しさん2007/07/18(水) 18:08:40
char型の変数 c があるとして、 int n = (int)c; でUnicodeでの文字コードが取得できるらしいんですが、
これをShift-JISでの文字コードを取得するにはどうしたらいいですか?
0729デフォルトの名無しさん2007/07/18(水) 18:54:30
> int n = (int)c; でUnicodeでの文字コードが取得できる
出来ません。
CharacterやStringクラスにコードポイントを返すメソッドがあるのでそれを使いましょう。

今のunicodeは21bitなんだな
0730デフォルトの名無しさん2007/07/18(水) 19:03:00
>>728
char型の変数cに収まる範囲の文字コードについてはいい加減にこういうふうに
char c = 'あ';
short s = java.nio.charset.Charset.forName("Shift_JIS").encode(String.valueOf(c)).getShort();
System.out.printf("%04x%n", (int)c);
System.out.printf("%04x%n", s);
0731デフォルトの名無しさん2007/07/18(水) 19:15:44
>>730
Charsetまで呼ばなくても、それならこれでいいんじゃね?
for (byte b : String.valueOf(c).getBytes("Shift_JIS")) System.out.printf("%02x", b);
0732デフォルトの名無しさん2007/07/18(水) 21:44:44
>>717
急いで書いたらしょうもないミスしてますね、すいません。
配列で出来るんですか…う、う…ん…。
何か根本的にやり方がおかしいようですね…。
勉強しなおしてきます。
0733デフォルトの名無しさん2007/07/18(水) 22:47:44
JTable にスクロール機能を持たせる場合、通常 JScrollPane を使用しますが、
大量データがある場合はパフォーマンスとリソースの観点から実用的では無い
ので、JScrollBar を使用した手動スクロールを作成したいのですが、
作成方法を教えて頂けませんでしょうか?
サンプルなどがあるHPでも結構ですので、ご教授頂けると幸いです。
0734デフォルトの名無しさん2007/07/18(水) 22:57:28
688
0735デフォルトの名無しさん2007/07/18(水) 23:01:21
Frame上でJSplitPaneとか、Jの付くコンポーネント使って何か問題ありますか?
0736デフォルトの名無しさん2007/07/18(水) 23:10:52
>>733
> 大量データがある場合はパフォーマンスとリソースの観点から実用的では無い
JScrollPane使ってたら、描画が必要な部分しか描画しないはずだが。
0737デフォルトの名無しさん2007/07/18(水) 23:12:34
軽量が先、重量が後に描画に起因する事象。問題あるかどうかはやり方次第。
0738デフォルトの名無しさん2007/07/18(水) 23:19:24
>>736
Swingの使い方間違えてんだろう・・・Swingで著しくパフォーマンス悪いのと描画に問題あるのは昔からマが使い方間違えてるだけだし。

JTreeを初期化時に全部ツリー作るとかさ。

そういうことだ>>733ソース晒すなりしないと。
今のマシンスペックじゃあブラウザでFlash自慰サイト読み込んで
メモリ1Gくらい食ってガンガン動かしても余裕だからjavaなんて論外。
0739デフォルトの名無しさん2007/07/18(水) 23:46:53
public void run() {
 try {
  while (true) {
   Socket acceptedSocket = serverSocket.accept();
   hogehoge(acceptedSocket);
  }
 } catch (InterruptedException e) {
 } catch (IOException e) {
  e.printStackTrace();
 } finally {
  try {
   serverSocket.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}
他のスレッドからThread#interrupt()で止められるサーバーってこう書くのかと思ったら
例外 java.lang.InterruptedException は対応する try 文の本体ではスローされません。
正しくはどう書くものなんでしょうか。
0740デフォルトの名無しさん2007/07/18(水) 23:47:08
>javaなんて論外
Flexっていう便利なものがあるんだからJavaでGUI書くなんて
論外って意味なのか、Javaで書くと重いと文句を言うなんて
(使い方を間違えてるだけから)論外って話なのか、どっちだろう
0741デフォルトの名無しさん2007/07/19(木) 00:36:26
>>739
Thread#isInterrupted()、Thread#interrupted() 使って
自前で割り込みされたかチェック。

何したいのか良く分からんけど、
interrupt で止められるサーバって考え方自体が正しくないような気もするが。
0742デフォルトの名無しさん2007/07/19(木) 00:47:41
>>739
ここでその手の話にまったく詳しくない俺が本で読んだだけの知識で答えるぜ
1.ServerSocket#accept()はInterruptExceptionを投げない→タイムアウトを使うしかないはず(nioあたりで止められるのはあった気がする)
2.Thread#interrupt()を実行したら勝手にInterruptExceptionが発行されるわけではない→Thread.currentThread().isInterrupted()でインタラプト状態を確認し手動で投げる
3.hogehogeがやたら時間のかかる処理でInterruptExceptionを使う場合hogehoge内で2の動作をすることでキャンセル可
07437392007/07/19(木) 01:12:45
参考になりました。
・・・が、方針の段階で間違っているんですかね・・・。
サーバーって普通どう止めるものなんでしょう?
0744デフォルトの名無しさん2007/07/19(木) 01:40:36
そこでThreadPoolExecutorの出番ですよ
0745デフォルトの名無しさん2007/07/19(木) 10:31:20
javaの配列の宣言で

class Fuck
{
String str[] = new String[5];

public static void main(String[] args)
{
}
}
ってやると配列の宣言でエラーがでるんですが何故でしょうか?
配列の宣言文をメインの中でやるとエラーはでないんですが
0746デフォルトの名無しさん2007/07/19(木) 10:35:46
static
07477452007/07/19(木) 10:46:32
すみませんソース間違えました;
class fuckArr
{
static String str[] = new String[5];
str[0] = "myGOD";


public static void main(String[] args)
{
System.out.println(str[0]);
}
}
で
fuckArr.java:4: ']' がありません。
str[0] = "myGOD";
^
fuckArr.java:4: <identifier> がありません。
str[0] = "myGOD";

ってエラーがでるんですが何故でしょうか?
mainでstr[0] = "myGOD";ってやると通るのですが
0748デフォルトの名無しさん2007/07/19(木) 10:46:41
>>745
配列の宣言(String str[] = new String[5];ってやってるところ)では エラーでないでしょ。

staticメソッドからは static でないメンバにアクセスできないけど。
0749デフォルトの名無しさん2007/07/19(木) 10:51:08
>>747
そこには式文かけないから当たり前。
フィールド宣言時に初期化子つかってやるか、静的初期化子使え。

static String[] str = { "myGOD", null, null, null, null };
static String[] str = new String[]{ "myGOD", null, null, null, null };

static String[] str = new String[5];
static { str[0] = "myGOD"; }
0750デフォルトの名無しさん2007/07/19(木) 10:52:11
ぬるぽ
0751デフォルトの名無しさん2007/07/19(木) 10:52:42
class fuckArr
{
static String str[] = new String[5];
str[0] = new String("myGOD");


public static void main(String[] args)
{
System.out.println(str[0]);
}
}
0752デフォルトの名無しさん2007/07/19(木) 10:54:30
>>747
str[0] = "myGOD";がある場所はコンストラクタやフィールド、メソッド、内部クラスの定義しか書けない場所。
07537452007/07/19(木) 11:08:51
>749-752
レスthx
単純に式文がかけない場所なんですね
0754デフォルトの名無しさん2007/07/19(木) 13:54:28
Java sound apiを利用してWebアプリケーションを構築したいと考えているのですが
例えばページ上でボタンを押したら録音が始まり10秒間録音してユーザーのローカルにファイルとして保存するようなJSPは
構築可能でしょうか?

頭でなかなかイメージできないので、可能か不可能かも分かりません
具体的な解説を付け加えてもらえれば、なお助かります
0755デフォルトの名無しさん2007/07/19(木) 14:05:41
ファイルの内容を一行消したい場合は何を使えば良いのでしょうか?
0756デフォルトの名無しさん2007/07/19(木) 14:20:30
>>754
無理というかJSPにする意味が分からんというか。
そういうのはJWSにした方が良いよ。
0757デフォルトの名無しさん2007/07/19(木) 14:37:26
>>756
JWSとJSPはサーバサイドかクライアントサイドかの差だけだと思っていたので、
サーバ側の自分が負担できればと思っていたのですが・・・
またもしJSPであれば、クライアント側はJRE等が必要なくて済むかと・・・

つまり先述の例であれば、JWSの方が良い理由があるということでしょうか?
0758デフォルトの名無しさん2007/07/19(木) 14:53:09
サーバサイドのプログラムでクライアントの音声デバイスにはアクセスできない。
サーバにくっついてるマイクの音だけしか拾えない。
0759デフォルトの名無しさん2007/07/19(木) 14:55:58
Javaを理解するためにはアルゴリズムを勉強したほうがいいでしょうか?
0760デフォルトの名無しさん2007/07/19(木) 15:06:23
>>757
サーバー側で動くもの作ったことある?
というかどういう風に動いてるか知ってる?

根本的なところから勉強した方が良い気がする。
0761デフォルトの名無しさん2007/07/19(木) 15:07:03
>>759
Javaに限らずそれはしたほうがいい
0762デフォルトの名無しさん2007/07/19(木) 15:37:59
RMIでできるべ
0763デフォルトの名無しさん2007/07/19(木) 15:39:19
サーバ側のミキサーにアクセスするだけの話
だからそれほど難しい話ではない
0764デフォルトの名無しさん2007/07/19(木) 15:44:09
>>761
ありがとうございます。
ちなみにビギナー向けでいい本ご存知ですか?
0765デフォルトの名無しさん2007/07/19(木) 15:55:10
>>764
アルゴリズムの勉強は言語(Javaでもいい)の基礎が出来ていて多少書けることが前提
「アルゴリズム」とか「データ構造」でぐぐればネットでも勉強できる
これはC言語だけどアルゴリズムの考え方自体は同じだから参考になると思う
http://www.geocities.jp/ky_webid/algorithm/index.html
Javaで説明されてる本も出版されてるみたいだけど読んだことは無い
0766デフォルトの名無しさん2007/07/19(木) 16:08:57
>>765
そうですか。自分はJavaの勉強に行き詰っている状態なのでちょっと厳しいかもしれません
ネットでも勉強出来るんですね?ありがとうございました
0767デフォルトの名無しさん2007/07/19(木) 16:22:07
基本的なアルゴリズムが身につくと応用力が付く
ネットで見たりするソースに隠れたものを理解できるようになる
そうなるとどんどん力が付くよ。

最初はやはり本で少し学んだ方がいいかもしれない
それほど高く無い値段で出回ってる。
0768デフォルトの名無しさん2007/07/19(木) 16:35:37
本日の部下との会話

俺:newってどういう意味?

部下:
          ____   
       / \  /\ キリッ
.     / (ー)  (ー)\      
    /   ⌒(__人__)⌒ \  あたらしく作るということです 
    |      |r┬-|    |      
     \     `ー'´   /      
    ノ            \
  /´               ヽ              
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.    
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


俺:newって単語の意味だけで想像して言っただろ?

部下:はい(´Д`;)ヾ
0769デフォルトの名無しさん2007/07/19(木) 17:00:11
苦労してるな
0770デフォルトの名無しさん2007/07/19(木) 17:03:28
>>765
フヒヒ 横からいいHPハケーン!
0771デフォルトの名無しさん2007/07/19(木) 17:50:23
>>763
クライアント側のミキサーにアクセスしようとしてるんだと思うが?
0772デフォルトの名無しさん2007/07/19(木) 17:58:17
だったらそれでもいいだろ
難しく考えすぎ
0773デフォルトの名無しさん2007/07/19(木) 18:16:19
盗聴のような真似ができるから今問題になってるね
07747552007/07/19(木) 19:00:25
どなたか(´;ω;`)
0775デフォルトの名無しさん2007/07/19(木) 19:03:44
読み込んだあと該当箇所のエスケープシーケンスを消す
そのあと保存
0776デフォルトの名無しさん2007/07/19(木) 19:04:45
1行ずつよみこんで新たなファイルに書き込む。該当行はスキップ。
0777デフォルトの名無しさん2007/07/19(木) 20:23:58
特定の文字列に対して正規表現がマッチしている、みたいなのはできたのですが、
正規表現を指定してそれにマッチする文字列をランダムで作成する、みたいなことってできないでしょうか。
仕事なんでできないとだめなんですが、ご意見いただけないでしょうか。
0778デフォルトの名無しさん2007/07/19(木) 21:10:16
>>777
ランダムで文字列を作成して、正規表現にマッチしていればループを抜ける
0779デフォルトの名無しさん2007/07/19(木) 21:17:15
正規表現を逆解析して、適切なテストデータを流すDBからデータとってくるとかかな
むかーし、そんな感じのテストツール作ろうかと考えたこともあった。
0780デフォルトの名無しさん2007/07/19(木) 21:30:12
正規表現の逆なんて正規表現でのマッチングよりも難しいんじゃないか?
適当に使用する文字を絞り込んでから778の言うようにランダムに作成してマッチングかけるのが手っ取り早そうだ

仕事なんで出来ないとダメってのは何かおかしいと思うぞ
出来ないものは出来ないと言うべきだ
0781デフォルトの名無しさん2007/07/19(木) 21:38:22
>>778
最初それで考えたんだが、文字数だとかが絡んだりするとそう簡単にはいかんことに気付き断念

>>780
普通はそうなんだろうが、そうもいかない会社はいくらでもあるのよ。

とりあえず対応できそうな構文のみでいってみるか・・・
0782デフォルトの名無しさん2007/07/19(木) 21:43:34
>>781
だいたい何の用途で使うんだ?
正規表現って言ってもどこまで対応するかによってとんでもなく面倒だぜ
0783754・7572007/07/19(木) 21:51:25
>>758
なるほど、これでだいぶ理解できました
ありがとうございます
>>760
全くの初心者です
今日、早速本を買ってきました
これから勉強していこうと思います
ありがとうございました。
0784デフォルトの名無しさん2007/07/19(木) 22:27:57
>>774
特にAPIは無いんじゃないの?
0785デフォルトの名無しさん2007/07/19(木) 22:32:00
>>781
1.
ある表現から固定の決まったシーケンスを出すようにする
[a-z]* なら aaa
[0-9]* なら 000
2.
あるシーケンスの正規表現マッチングを崩さないような変更を行うメソッドを
いろいろ(対応する正規表現分だけ)用意する
例:
[a-z]* の aaa を aab にするとか、 aaにするとか。

3.
1.に対して2.を適当な回数適用する

どう?
まぁできあがる表現に偏りはできると思うがね。
ランダムの定義が曖昧だしこれでいいよな?
1.のシードをある程度余分に作っておけばそれなりにばらけるかもしれないし。
0786デフォルトの名無しさん2007/07/19(木) 22:57:47
こういうときこそSnobolですよ、奥さん。
自然言語マッチ用言語の本領発揮!
0787デフォルトの名無しさん2007/07/19(木) 23:07:05
>>781
まずは対応できる正規表現のパターンを絞り込む事が重要だな
絞り込んじまえばたいしたことはないと思うが、全てに対応しろといったら1プロジェクトだろう
0788デフォルトの名無しさん2007/07/19(木) 23:52:46
1.4のプログラムを1.5のGenericsを使った記述に変更してますが、
よく分かりません。

例えば、配列の偶数要素をキー、奇数要素を値とするMapを生成するメソッド
public static Map arr2map(Object[] arr)
のMapをGenericsを使った記述にする場合、

(1)public static Map<Object,Object> arr2map(Object[] arr)
(2)public static Map<?, ?> arr2map(Object[] arr)
(3)public static <K, V> Map<K, V> arr2map(Object[] arr)

などが考えられますが、どれがいいものでしょうか。
なにか、ガイドラインとなる書籍、URL等ありましたら教えてください。
0789デフォルトの名無しさん2007/07/20(金) 00:00:27
>>788
言っている意味も考えられる選択肢もワカラネ
そもそもObject[]の時点で終わってるのでGenericsに対応しない方がいいんじゃね?

キーの型がKey、値の型がValueであるならば
public static Map<Key, Vaue> arr2map(Object[] arr)
が正しい。
キーも値も決まってないならば、
public static Map<Object, Object> arr2map(Object[] arr)
となるけど、それならば
public static Map arr2map(Object[] arr)
のままでいいんじゃね?ww
0790デフォルトの名無しさん2007/07/20(金) 00:03:01
総称型使ってClassCastExceptionを起こすのはナンセンス
0791デフォルトの名無しさん2007/07/20(金) 00:14:43
>>788
Map<? extend foo, ? extend bar>かMap<K, V>だろうねぇ。

けど、>配列の偶数要素をキー、奇数要素を値とする
なんて非OOなレコードの持ち方が変。
keyとvalueのペアを持つエントリクラス作ってそれを持っておくだろ。

static Map arr2map(Object[])なんて変換関数用意するんじゃなくて初めからmapやsetで持ってkeyだけ・valueだけ詰めた配列返すメソッド用意する。
とか、こういう設計の方が自然。
0792デフォルトの名無しさん2007/07/20(金) 00:18:16
>>789みたいな非OOな考え方ができない奴も居るし、ループ回す時複雑だし・・・
07937882007/07/20(金) 00:37:15
>>789-792

引数のObject[]が非非OOな持ち方なので、無理に総称型
使う必要は無い(ClassCastExceptionに起こしかねない)と
いうことですね。

設計考え直してみます。
ありがとう。
0794デフォルトの名無しさん2007/07/20(金) 00:45:13
>非非OOな持ち方なので、無理に総称型
使う必要は無い(ClassCastExceptionに起こしかねない)
いや、違う自分の良いように考えすぎ。
アプローチ間違ってますよってだけ。
キャストで例外出すってのはまた別の話。
0795デフォルトの名無しさん2007/07/20(金) 00:58:01
>>788
俺だったら、こんな感じかなぁ

/** 今後はこっち使ってください */
public static <K, V> Map<K,V> arr2map(Object[] arr, Class<K> keyType, Class<V> valueType) {
  Map<K,V> map = new HashMap<K,V>();
  for(int i = 0; i < arr.length - 1; i+=2){
    map.put(keyType.cast(arr[i]), valueType(arr[i+1]));
  }
  return map;
}

/** 互換性のため */
@Deprecated
public static Map<?, ?> arr2map(Object arr) {
  return arr2map(arr, Object.class, Object.class);
}
0796デフォルトの名無しさん2007/07/20(金) 00:59:06
×    map.put(keyType.cast(arr[i]), valueType(arr[i+1]));
○    map.put(keyType.cast(arr[i]), valueType.cast(arr[i+1]));

× public static Map<?, ?> arr2map(Object arr) {
○ public static Map<?, ?> arr2map(Object[] arr) {
0797デフォルトの名無しさん2007/07/20(金) 01:21:25
String.format("%02X", byte) の逆をやるにはどうするのが普通なんですかね。
つまり文字列"00"からは0x00、"79"からは0x79、"80"からは-0x80、
"81"からは-0x79、"FF"からは-0x01のbyte値を生成したいんです。
0798デフォルトの名無しさん2007/07/20(金) 01:25:58
int val = (byte)Integer.parseInt(str, 16);
07997972007/07/20(金) 01:43:51
>>798
なるほど! ありがとうございます。
0800デフォルトの名無しさん2007/07/20(金) 06:16:29
>>739
遅レスだが、ソケットを閉じる
08017552007/07/20(金) 10:32:14
レスくれた方どうも有難う御座います。
ググっても適当なメソッドや関数が見つからないと思ったら本当に無いんですか・・・
凄く冗長な気がしますが大人しくファイル二つの間でコピーし合う事にします
0802デフォルトの名無しさん2007/07/20(金) 10:41:05
for( int i = 0; i < 10; i++ ) {
int j = i;
}

こんな風にループ内で変数の宣言していると、回るたびに変数分のメモリを消費していく?
int型の4バイト(?)づつ浪費することになる?
0803デフォルトの名無しさん2007/07/20(金) 10:42:22
>>802
intはオブジェクトじゃないからならない。
0804デフォルトの名無しさん2007/07/20(金) 10:54:28
>>803
オブジェクトだとどんどん消費するってことですか?

class Hoge {

public static void main( String[] args ) {
while( 1 ) {
xxx();
}
}

public void xxx() {
// ここでオブジェクトの宣言
}

上のようにやればxxx()が終了した時点でオブジェクトのメモリは解放?されると思ってるんですが合ってますか?
0805デフォルトの名無しさん2007/07/20(金) 10:58:38
オブジェクトは xxx が終了した時点で
ガベージコレクタによってメモリを開放される条件を満たすようになるが、
実際にメモリが開放されるのはそれ以降でガベージコレクタが実際に走った時。
0806デフォルトの名無しさん2007/07/20(金) 10:58:56
xxx() が終わった時点で参照が外れてGCの対象にはなるが、
その後いつメモリが開放されるかどうかはGCまかせ。
0807デフォルトの名無しさん2007/07/20(金) 11:20:42
レスありがとうございます。

ループ内でオブジェクトを宣言する場合は>>804のやり方で大丈夫でしょうか?
メモリ周りを気にしています。
一番いいのはループ内でオブジェクトは宣言しないことですよね・・・

軽くGCを調べたら「GCはマルチスレッドで動く」ってあったので期待したい。
0808デフォルトの名無しさん2007/07/20(金) 12:14:44
>>807
変数宣言は、できるだけスコープを小さくした方がいい。
この場合なら、ループ内で変数宣言した方がいい。
変数のスコープが小さいときは、
最適化されて変数がレジスタのみ使用し、スタックメモリを消費しなくなる。
オブジェクトの生成はそういうわけにはいかず、
newの度にヒープを消費することになる。
0809デフォルトの名無しさん2007/07/20(金) 12:47:38
いまどきはエスケープ解析されて、スタックに詰まれる。
0810デフォルトの名無しさん2007/07/20(金) 13:46:12
メモり周りをシビアに使いたいなら Java じゃない方がいいんじゃないかなあ
0811デフォルトの名無しさん2007/07/20(金) 14:10:46
でも管理は楽
0812デフォルトの名無しさん2007/07/20(金) 15:19:29
レジスタにのっけるかどうかのアルゴリズムって5.0のままだっけ?6で変わらなかった?
0813デフォルトの名無しさん2007/07/20(金) 15:20:37
>>812
レジスタにのっけるかどうかのアルゴリズム自体が 6.0 で追加されたんじゃなかったか?
0814デフォルトの名無しさん2007/07/20(金) 16:08:12
JDBCリクエストをラップして、
DB の多重化を簡易的に行えるライブラリはありませんでしょうか。

例えば、アプリケーション層のノードが二つ(A,Bとします)
DBノードも二つ(X,Y とします)あるとすれば、

A,B ともラッパー経由で更新していれば X,Y に格納されており、
もし JDBC リクエストで X が落ちたら、Y のみに要求する、と言う形です。

この例であれば X への更新をプールして、X が復活したのを検出したら
流していってくれると最高ですが、この部分は X を復帰させる手続きと
して手動でやれということでも構いません。
08158142007/07/20(金) 16:15:52
C-JDBC, Sequoia あたりはそうなんですかね…
いまいち、一般的に使われているかどうかが分かりません。
0816デフォルトの名無しさん2007/07/20(金) 16:43:41

フォントの実際の大きさを求めるにはどうすればいいのでしょうか。

 JFrameにJTextAreaを乗せてデータを表示していましたが、一部の文字の色を
変える為に、JTextAreaからJTextPaneへ変更しました。しかし、JTextPaneでは
JTextAreaのように行数と列数を指定できません。それはJTextPaneのフォント
サイズが可変な為だと思います。けれでも私のプログラムのフォントは等幅で
大きさは全て等しく、色が一意でないだけなので、一文字の実際の高さと幅が分
かれば列数、行数ともに算出可能なはずです。そうすれば
setPreferredSize(Dimension d)を使って出来上がりです。

 そこで調べてみたところ、FontMetricsクラスを使えば期待する動作が行えそう
です。FontMetricsは抽象クラスなので、Graphics.getFontMetrics(Font f)を使
ってインスタンスを生成しなければいけませんが、そのGraphicsクラスを使う方
法が分かりません。Canvs.paint(Graphics g)を使えばできますが、それだけの為
にCanvasクラスを使うのは違う気がしました。
0817デフォルトの名無しさん2007/07/20(金) 17:12:03
>>816
使用するフォントを実際に指定できているわけだから
そのフォントを表すFontクラスのインスタンスは得ることができるよね?
そしたらあとはJComponent#getFontMetrics(Font)でFontMetricsのインスタンスを得ればいいじゃない
0818デフォルトの名無しさん2007/07/20(金) 20:51:39
質問です。

OutputStream out = new OutputStream();
DataOutputStream dout = new DataOutputStream(out);
という風にDataOutputStreamを作って、

dout.close(); を行うと、
out.close()も勝手にやってくれるのでしょうか?
0819デフォルトの名無しさん2007/07/20(金) 20:57:47
JavaDocを見なさいって。基本中の基本。
見るのはFilterOutputStreamの方だというヒントは教えとく。
0820デフォルトの名無しさん2007/07/20(金) 20:59:40
>>818
> dout.close(); を行うと、
> out.close()も勝手にやってくれるのでしょうか?
一応やってくれるけど、
例外食らった場合は out.close() してない可能性もある。
0821デフォルトの名無しさん2007/07/20(金) 21:10:51
javaってどんなところに使われてるの?
08228182007/07/20(金) 21:10:58
>>819
>>820
ありがとうございます。
0823デフォルトの名無しさん2007/07/20(金) 21:13:54
>>821
国防
0824デフォルトの名無しさん2007/07/21(土) 00:42:06
>>821
火星
0825デフォルトの名無しさん2007/07/21(土) 01:01:23
参考書とりあえずやったんですけど、どうすればいいですか?
後はAPIっていうのを見ながらやるんですか?
0826デフォルトの名無しさん2007/07/21(土) 01:04:09
>>126は具体的にどのように実装するのか教えていただけませんか。
0827デフォルトの名無しさん2007/07/21(土) 01:43:16
>>825
何か作りたいから Java 勉強したんじゃないの?
0828デフォルトの名無しさん2007/07/21(土) 03:09:46
>>825
やったのは単なる入門書で文法を学んだだけじゃないの?
参考書ってのは何かを作るときに参照するものだよ

特に作りたいものがないならばゲームでも作ってみるのがいいんじゃね
GUI関連は業務じゃ使う機会少ないけど、デザインパターンとか設計力を鍛えるには一番だとばっちゃんが言ってたよ
■ このスレッドは過去ログ倉庫に格納されています