出力されたオブジェクトのサイズによってJFramのサイズを変更するようにするには、どう記述するのが効率的ですか?
例えば、パネルに出力された何行かの文字列を全て表示できるようにフレームサイズを可変長にしたいです。
TN8001が👍を押しています
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
そのJFramで使われてるフォント情報から、その文字列の横幅を算出して、それに合わせて横幅を設定してやればよろしい
投稿2021/06/09 02:42
総合スコア88042
0
ベストアンサー
効率的というのがパフォーマンス上なのか記述量的なものかわかりませんが、pack()
すればいいんじゃないですか。
(レイアウトパスが走るのでしょうから、軽い処理ではないでしょうね)
Window#pack (Java Platform SE 8 )
Java
1import java.awt.BorderLayout; 2import javax.swing.JFrame; 3import javax.swing.JLabel; 4import javax.swing.JTextArea; 5import javax.swing.event.DocumentEvent; 6import javax.swing.event.DocumentListener; 7 8public class Sample extends JFrame { 9 public static void main(String[] args) { 10 new Sample().setVisible(true); 11 } 12 13 Sample() { 14 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 15 16 JLabel label = new JLabel("<html>aaa<br>bbbbbbbbbbbbbbbbbbbbbbbbbbb<br>ccc"); 17 add(label, BorderLayout.NORTH); 18 19 JTextArea textArea = new JTextArea("aaa\nbbb\nccc"); 20 textArea.getDocument().addDocumentListener(new DocumentListener() { 21 @Override public void insertUpdate(DocumentEvent e) { 22 pack(); // さすがにやりすぎだとは思うが^^; 23 } 24 25 @Override public void removeUpdate(DocumentEvent e) { 26 pack(); 27 } 28 29 @Override public void changedUpdate(DocumentEvent e) { } 30 }); 31 add(textArea, BorderLayout.CENTER); 32 33 pack(); 34 setLocationRelativeTo(null); 35 } 36}
投稿2021/06/09 09:32
総合スコア9862
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答ありがとうございます。
Packを使ってみようと思います!
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。