質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

3233閲覧

文字の高さのセンタリング中央揃えで座標でプラス+を使っている意味を教えて頂けませんか?

gyro16

総合スコア89

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/04/25 05:00

編集2017/04/25 05:01

###前提・実現したいこと
fontsizeを1からAppletHeight-10まで上げていく中で、
文字の高さのセンタリング中央揃えするプログラムで

y = AppletHeight / 2 + (fontmetrics.getAscent() -fontmetrics.getDescent()) / 2;

となっているのですが、

AppletHeight/2 に”プラス +” (AscentからDescentを引いた差)の半分している意味が分かりません。

Ascent-Descentの差の半分は文字の中央という意味は分かるのですが、

確かにプラス+ するとセンタリングになっています。

感覚的にはマイナス-なのだと思ってしまいます。

文字の座標のセンタリングでプラス+を用いているか、教えて頂けませんか?

###発生している問題・エラーメッセージ

エラーメッセージ

###該当のソースコード

ここにご自身が実行したソースコードを書いてください

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Ascent-Descentの差の半分は文字の中央ではないです。Ascent8:Descent2のフォントだとしたら、(8-2)/2は3、文字の中央は5なのでずれてますよね。
Javaのフォント描画は(とくに何も設定しなければ)ベースライン基準で描画されます。なので、指定したy座標にフォントの中心を揃えたいのであれば、ベースラインに対してAscent−Descentの半分を足してやる必要があります。
例えばy10にそのまま文字を書くと、文字の上端は10-8=2、文字の下端は10+2=12となり、2から12の範囲に描画されます。y10を中心に10の大きさを書くなら5から15の範囲に描画されてほしいですよね。そうなると先程の(Ascent-Descent)/2を足すことで2から12の範囲は5から15となり、適正となります。

投稿2017/04/25 05:15

masaya_ohashi

総合スコア9206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gyro16

2017/04/25 05:24

そうですね、文字の描画はベースライン基準。文字の場合は左下でしたね。 高さの中央からはなれる分がAscent - Descentの半分ですね。
guest

0

コードがないので推測ですがおそらくGraphics gに対して

g.drawString("I", x, y);

などとする場合のyの計算の話だと思います。文字を描画する際、大抵のGUIシステムでは文字の左上ではなくベースラインを基準にします。それがご質問のような計算を行う根拠です。

+++ + + + o++ <--- "I"という文字をdrawStringで書く場合のx,yで指定する基準点は'o'の位置

なぜそうなっているかといえば・・・大文字・小文字・フォントの大きさを様々に変えてそれを横に並べて描画するといった際にベースラインがあっているときれいに並ぶからだと思います。

投稿2017/04/25 05:21

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gyro16

2017/04/25 05:26

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問