- - PR -
長い文字列を表示する時には
1
| 投稿者 | 投稿内容 | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-04-20 18:59
長い文字列を表示したい場合、皆様はどんなAWTコンポーネントを使用されますか?
例えばフレームの幅が100で、その上に文字列の長さが200とします。 文字列の長さは private FontMetrics strFontM; strFontM = Frame1.getFontMetrics(Font("Helvetica", Font.BOLD, 10)); StringLen = strFontM .stringWidth(longString); ってな感じで取得した長さです。 文字列の長さがフレームの幅よりも長いので、表示する際に途中で折り返して2行で表示しなくてはなりません。 文字列を表示する物として ・ラベル(java.awt.label) ・テキストエリア(java.awt.TextArea) ・直接書くってのもありですね が代表的だと思うのです。 ラベルは2行にして表示はできないですよね?どうしてもラベルに表示したい場合はラベルを 2枚用意する必要がありますよね? だからテキストエリアか直接フレームに書くって方法しかないでしょうか? 質問がまとまりませんが、こんな方法もあるぞってのがありましたら教えてください。 *仕様上Swingは使えません。 | ||||||||||||||||||||
|
投稿日時: 2004-04-20 22:42
ComponentやCanvasから派生した複数行表示できるラベルを作るというのは?
単純に折り返すだけなら、ラベル幅と文字幅から折り返し段数を計算し、ラベル幅X(文字高さX折り返し段数)のオフスクリーンイメージを作成する。 一行に表示できる文字数を計算しながら、オフスクリーンイメージに文字を描画した後、スクリーンのGraphicsにdrawImageでオフスクリーンイメージを転送するだけです。 単語単位での折り返しとなるとちょっと思いつきません。 | ||||||||||||||||||||
|
投稿日時: 2004-04-22 02:31
以下細かいことですが。 ラベル文字列にダブルバッファリングは必要なのでしょうか? 直接ペインのGraphicsにdrawString()しても良いかとおもいますが…
こういう用途には、java.text.BreakIteratorが利用できませんか? | ||||||||||||||||||||
|
投稿日時: 2004-04-22 08:44
かずくん、シュンさんご意見ありがとうございます。
以下のようにしてみました。(見づらいですが・・・)
ただ単語単位での折り返しってのが良くわかりません。 シュンさんから教えていただいた"java.text.BreakIterator"をどのように使えばよいのか? | ||||||||||||||||||||
|
投稿日時: 2004-04-22 09:09
これは、知りませんでした。これって、日本語と英単語が混じったものでも、切り分けれるんですかね?
使用法は、APIリファレンスを見てもらえばよろしいかと。 http://java.sun.com/j2se/1.4.2/docs/api/java/text/BreakIterator.html ついでに、日本語と英単語入り混じり文が切り分けれるかの報告があると、うれしいなぁ。 | ||||||||||||||||||||
|
投稿日時: 2004-04-22 16:03
こんにちは、さくらばです。
分けられます。日本語の単語は認識できませんが、禁則処理は行えます。
それよりも Java2D のTutorial の方がいいと思います。 http://java.sun.com/docs/books/tutorial/2d/textandfonts/linebreakmeasure.html 前の引用になってしまいますが、ご容赦ください。
ラベルを作るのはいいと思いますが、Canvas のような Heavy-Weight な コンポーネントを使う必要はないと思います。 # Canvas はコンパチを保つために残しているのだと個人的には思っています。 下の例はシンプルにするためにわざとダブルバッファリングをしていません。 ある程度文字列が長くなった場合は描画に時間がかかるようになるので、ダブル バッファリング (特に BufferStrategy を使用したダブルバッファリング) は 不可欠だと思います。
| ||||||||||||||||||||
1
