JTextFieldのテキストがこれらのJTextFieldの表示領域よりも大きいかどうかを確認して、フォントサイズを変更できるようにするにはどうすればよいですか?
助けてくれてありがとう。心からクリスチャン
JTextFieldのテキストがこれらのJTextFieldの表示領域よりも大きいかどうかを確認して、フォントサイズを変更できるようにするにはどうすればよいですか?
助けてくれてありがとう。心からクリスチャン
代わりにJTextField
、選択したフォントの高さを尋ね、希望する幅を仕様に合わせて設定します(例:以下の例では240)。ユーザーは、左矢印キーと右矢印キーを使用してテキストをスクロールできます。
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
/** @see http://stackoverflow.com/questions/3646832 */
public class JTextFieldTest extends JPanel {
public JTextFieldTest() {
String s = "A damsel with a dulcimer in a vision once I saw.";
JTextField tf = new JTextField(s);
tf.setFont(new Font("Serif", Font.PLAIN, 24));
tf.validate();
int h = tf.getPreferredSize().height;
tf.setPreferredSize(new Dimension(240, h));
tf.getCaret().setDot(0);
this.add(tf);
}
private void display() {
JFrame f = new JFrame("JTextFieldTest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new JTextFieldTest().display();
}
});
}
}
補遺:さらに良いのは、適切なレイアウトを使用し、それに応じて収容パネルの希望するサイズを設定することです。これにより、ユーザーがウィンドウを拡大した場合に、初期レイアウトが「呼吸」できるようになります。
public JTextFieldTest() {
this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
String s = "It was an Abyssinian maid, and on her dulcimer she played,";
JTextField tf = new JTextField(s);
tf.setFont(new Font("Serif", Font.PLAIN, 24));
tf.validate();
int h = tf.getPreferredSize().height;
tf.getCaret().setDot(0);
this.setPreferredSize(new Dimension(240, h));
this.add(tf);
}
特定のフォントのテキスト幅をクラスで計算し、FontMetrics
この長さをテキストフィールドの幅と比較することができます。
JtextField field = new JTextField();
FontMetrics fm = field.getFontMetrics(field.getFont());
int textwidth = fm.stringWidth(field.getText());