ここから本文です

JAVAのg.drawStringの改行のアルゴリズムについて

tpc********さん

2013/2/2205:43:26

JAVAのg.drawStringの改行のアルゴリズムについて

public class StringComponent extends JPanel{
private int x = 10;
private int y = 20;
private ArrayList<String> list = new ArrayList<String>();

public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setFont(font);

for(int i = 0; i < list.size(); i++){
g.drawString(list.get(i),x,y+(i*16));

if(i >= 10){
y -= 16;
}

}
}
}

皆様の回答で、伺かの基本部分は大体出来ました。
後は、文字をlist分表示させ、適切に改行するだけなのですが
色々と問題が出てきて、それを未だ解決する方法が思いつかないので質問させて頂きました。

JPanel の大きさを変えれば、うまーくできそうな気もしますが
色々環境が違えば、もしかしたら文字が切れたり、色々問題がでそうな気もするので

以下のような機能にしたいのです。
・8行までしか表示しません。
・行の高さは決まっています。(y0:36 y1:52 y3:68)とy=20に16刻み
・9行目以降は、1行目を消し、2~8行目を1~7行目にずらします。そして8行目にリスト9行目を書きます。

以下は今後実装する機能です。
・マウスで、上下にスクロールした際に、listを上下にずらして表示できるように。
ノベルゲームで言う、履歴をスクロールで見れるみたいなアレです。

アルゴリズムは定めたのに、実装できる頭の柔らかさがなくて
ずっと悩んでいます。

なお、画像は問題が発覚した際の画像です。
改行失敗例です。さらに、高さ指定していない+9行以上出ています…。

g.drawString,String&amp;gt,private int x,private int y,アルゴリズム,AffineTransform,FontMetrics

閲覧数:
1,349
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

xia********さん

2013/2/2206:42:31

文字の大きさはフォントで決まりますから、FontMetrics を
取得して確認するのがいいと思います。
FontMetrics は JPanel などの JComponent や Graphics の
getFontMetrics(Font) で取得出来ます。
大きさの調整はフォントの種類やサイズや、Font の
deriveFont(AffineTransform) や Graphics2D の
transform(AffineTransform) で調整するといいでしょう。

質問した人からのコメント

2013/2/22 17:09:49

ありがとうございます、色々Fontやら、JPanel、要素などを計算してみたら、
何とかどの環境にも表示できそうな物を作れました。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる