- PR -

Applet Labelクラスにて縦書きの仕方

投稿者投稿内容
n.w
大ベテラン
会議室デビュー日: 2003/07/15
投稿数: 126
お住まい・勤務地: 神奈川
投稿日時: 2004-06-10 16:01
いつもお世話になっています。
現在アプレットで画面を作成し、縦長のラベルクラスにsetTextなどで
文字を埋め込みたいのですが、縦書きで表示されることって可能でしょうか?
Javadocなどを見た限り見当たらなかったのですが、文字列えに改行コードいれて
そのStringの変数をsetTextの引数に渡してみたんですが、機種依存文字が出て
しまいました。 どなたかご存知の方教えてもらえると幸いです。

また、Labelクラスじゃなくても構いません。

環境
eclipse 2.1.2
plugin VisualEditor
JDK1.4.1
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2004-06-10 18:30
直接の回答ではなくてすみません。
私も興味があるので、成功した暁にはコードレットを公開していただけると幸いです。

国際化についての FAQ
http://java.sun.com/j2se/1.4/ja/docs/ja/guide/intl/faq.html

の「テキストのレンダリング」の項あたりが参考になるのではないでしょうか。
(ランタイムの font.properties.ja とかをいじる必要があるのかな...)

また、

Java製縦書きブラウザ 影鷹 http://www.kagetaka.org/
縦やオラ! for Java http://www.geocities.co.jp/Playtown-Spade/2177/tateya/index.html

なども参考になるでしょう。
syo
常連さん
会議室デビュー日: 2003/08/17
投稿数: 43
投稿日時: 2004-06-12 00:14
お世話になっております。

JLabelクラスならhtmlタグを使えますので、1文字ずつ<br>タグで改行するというのもありかもしれません。
setText("<html>a<br>b<br></html>");
こんな感じですか。

あまり美しくないですが(^^;;
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-06-14 15:04
ライブラリには、残念ながらそのような機能は無いようですね・・・

正道のやり方としては、そのようなレンダリングを行うComponentUIを自作して、JLabel
インスタンスにインストールする、ということになるのではないでしょうか。

ためしにごく簡単なサンプルを書いてみようと思ったのですが、何故か横幅が思いどうりに
なりません・・・どなたか、なぜかわかりますか?

コード:
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.plaf.LabelUI;
import javax.swing.plaf.basic.BasicLabelUI;

public class TestNewLabelUI extends BasicLabelUI{

 public static void main(String args[]){
  JFrame f = new JFrame();
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  JLabel l = new JLabel("あいうえおかきくけこ");
  LabelUI lui = new TestNewLabelUI();
  l.setUI(lui);

  JPanel pane = (JPanel)f.getContentPane();
  pane.add(l);
		
  f.pack();
  f.show();
 }
	
 public Dimension getPreferredSize(JComponent c) {
  JLabel l = (JLabel)c;
  String text =l.getText();
  Font f = l.getFont();
		
  return new Dimension((f.getSize()+2),(text.length()+1)*(f.getSize()+2)+4);
 }

 public void paint(Graphics g, JComponent c) {
  JLabel l = (JLabel)c;
  String text =l.getText();
  Font f = l.getFont();

  g.setColor(l.getForeground());

  for(int i = 0 ; i <text.length();i++){
   g.drawString(text.substring(i,i+1),2,2+(f.getSize()+2)*(i+1));
  }
 }
}

n.w
大ベテラン
会議室デビュー日: 2003/07/15
投稿数: 126
お住まい・勤務地: 神奈川
投稿日時: 2004-06-15 09:45
みなさんありがとうございます。 大変参考になりました。
syoさん、htmlタグを使って改行でラベル使ってみます。
必死に¥nなどの改行コードで改行させようとしちゃってました(^^;
シュンさんのサンプル大変勉強になります。 時間あるときにいじくってみます。

じたばたさん、現状、上からは縦書きにだせればなんでもいいと
すごくアバウトな依頼だったんで、JTextPanelを使ってしまってました。

こうじえん
会議室デビュー日: 2004/04/29
投稿数: 4
投稿日時: 2004-06-15 14:41
はじめまして、こうじえんといいます。

htmlで解決をされる方向に決まったようですが、一つ気になる点がありました
ので投稿しました。
本来縦書きでは、"ー"や"。"のような記号は横書き用とはグリフが異なります。
("ー"なら"|"(仮として別の文字を使ってます)に、"。"なら丸は左下ではなく
右上になります)

htmlでは単純に縦に文字を並べるだけなので、見た目あまりよろしくないため、
厳密に縦書きするのであれば、この点考慮されたほうがいいと思います。
私自身、解決方法を持っているわけではありませんが・・
もしそこまでは気にしないというのであれば、この投稿は無視してください


私も以前でJavaによる縦書きエディタを作成しました。このときはいくつかの
特殊要件があったため、JEditorPaneを改造するレベルですみました。
その特殊要件のため、上記のようなことには悩まなくてもすみましたが・・
(Javaも縦書き用フォントを普通に扱えるようになってほしいなぁ・・・)



[ メッセージ編集済み 編集者: こうじえん 編集日時 2004-06-15 14:42 ]
いっきゅう
大ベテラン
会議室デビュー日: 2004/04/04
投稿数: 153
お住まい・勤務地: 兵庫
投稿日時: 2004-06-15 15:02
テキスト文書を縦書き表示するだけ(編集不可)なら
こんなものも以前ありましたがどうでしょうか。
ソースから幾らか手直し入りますが、、
URL:http://www.geocities.co.jp/Playtown-Spade/2177/tateya/index.html
===========================================================
【名 称】 縦やオラ! for Java Lite Ver1.71a
【制作者名】 斑猫 賢二 (mousecat@anet.ne.jp)
【動作環境】 JDK1.0.2以降
-----------------------------------------------------------
【種  別】 フリーソフト
【 転 載 】 要連絡
===========================================================
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-06-22 11:34
引用:

こうじえんさんの書き込み (2004-06-15 14:41) より:
はじめまして、こうじえんといいます。

htmlで解決をされる方向に決まったようですが、一つ気になる点がありました
ので投稿しました。
本来縦書きでは、"ー"や"。"のような記号は横書き用とはグリフが異なります。
("ー"なら"|"(仮として別の文字を使ってます)に、"。"なら丸は左下ではなく
右上になります)




なるほど、そういう問題があるのですか。気が付きませんでした。
OSが縦書きフォントを提供していても、JVMではそのまま使用できない、という
ことなら、グリフ毎に適切にアフィン変換してドロー、というベタな手段しか
ないでしょうか?

サンプルコードは、可能性を示すだけの手抜きサンプルですので、そのあたりは
誤解無いようよろしくお願いします。>皆様

スキルアップ/キャリアアップ(JOB@IT)