アプリの状態に応じて異なる状態を表示するボタンを作成する必要があります。たとえば、何も開いていない場合、そのタイトルは "レッスンプラン"になり、プロジェクトBが開いていれば "プロジェクトBレッスンプラン"になります。私はこれにjava.awt.Buttonクラスを使用しています。私の質問は、ボタンが与えられたテキストにどれくらいの大きさであるべきかを決める方法です。たとえば、ボタンで使用されているフォント内の各文字の幅を何とか取得して、これを使用するタイトルの文字で乗算することはできますか?この文字の幅をどうやって取得するのですか?ありがとう!Javaのボタンに必要なサイズを測定する方法
答えて
特に文字間のスペースを考慮したい場合は、特定のフォント(すべての文字が同じ幅ではない)の幅を測定し、余白を追加すると、ボタンの端に当たる。 (N.B.他の人たちは、実現したよりも簡単にこれをやるためのいくつかの方法を提供してきました!)
もっと良い/もっと普通の解決策は、Javaがあなたに仕事をさせることです。 java.awt.Button
(またはjavax.swing.JButton
)を使用している場合は、通常、自動的にテキストのサイズに合わせられます。あなたの特定のボタンが奇妙な動作をしている場合は、おそらくレイアウトに問題があります。詳細については、Layout ManagersのJavaチュートリアルのセクションを参照してください。一例として、
(というよりもAWT、Swingで - 申し訳ありません!)、これら二つのボタンは、それらのテキストのための適切なサイズになってしまう:あなたは本当にむしろ、サイズが欲しいならば
import javax.swing.*;
public class ButtonTest {
public static void main(String[] args) {
JButton button1 = new JButton("Some label");
JButton button2 = new JButton("Some much longer label");
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.add(button1);
panel.add(button2);
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
}
Javaを最大限に活用するだけでなく、frame.pack()
の呼び出し後にbutton1.getPreferredSize()
とbutton2.getPreferredSize()
を呼び出すことをおすすめします。 APIのドキュメントで
ええ、私のボタンは、できるだけ多くのスペースを占有していると思われるので、私はそのリンクをチェックアウトするレイアウトの問題を持っている必要があります。どうもありがとう。 – Mike2012
あなたはBorderLayoutを使用しているかもしれませんが、コンポーネントを好みのサイズにするのではなく、使用可能なスペースに合わせて伸ばします。それが問題ならば、パネルにボタンを追加して、代わりにパネルを追加することができます。私は実際の問題が何であるか分からないので、完全に間違っているかもしれません! :) –
だけで簡単に一目で示しています。java.awt.fontの
public Rectangle2D getStringBounds(String str, FontRenderContext frc)
は、指定されたFontRenderContextで、指定されたStringの論理バウンドを返します。 の論理境界には、起点ascent、アドバンス、および高さ(先頭に含まれる)が含まれます。
これはあなたに役立つはずです。
ボタンにgetMinimumSize()
またはgetPreferredSize()
のいずれかを使用してみましたか?私は彼らの一人がラベルを表示するためにボタンが必要とする最小サイズを教えてくれると信じています。
awtボタンでは、getFontMetricsを呼び出してgetStringBoundsを要求することができます。これにより、これに基づいてボタンの推奨サイズを設定することができます。ボーダーに必要な余分なスペースは考慮されません(プラットフォームによって異なります)。
私はそれぞれの文字列を順番に設定して、優先サイズを取得してから、最大サイズの優先サイズを設定します。
フレンドリーな思い出 - awtとswingの両方のコンポーネントを混ぜて一致させないように注意してください。 – akf