4

私は:とを持っJFrameています。私は最初にそれをします。BorderLayoutJTextAreaNORTHJButtonSOUTHpack()

私のコードは、テキスト領域のフォント サイズを変更します。ダイアログ ウィンドウとそのコンポーネントを強制的に再レイアウトするにはどうすればよいですか?

これまでのところ、次のいくつかの組み合わせを試しました。

  • pack()
  • repaint()
  • revalidate()

役に立たないようです。

保証されたブルート フォース アプローチはありますか? そのような結果を達成するための適切な方法は何ですか?

アップデート:

SCCE (以下を参照) を作成しているときに、元のコードに 2 つの誤りが見つかり、それらを修正しました。フレームは現在、適切にサイズ変更されています。

これが適切な方法であるかどうか、まだ疑問があります。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class MyFrame extends JFrame implements ActionListener{

    private JTextArea txt;
    private JButton bis;
    private JFrame frame;

    int size = 10;

    private void BuildMainGUI() {
        txt = new JTextArea("This is just a line of text");
        bis = new JButton("Increase size");

        JPanel p1 = new JPanel();
        bis.addActionListener(this);

        BorderLayout bl = new BorderLayout();

        p1.setLayout(bl);
        p1.add(txt, BorderLayout.NORTH);
        p1.add(bis, BorderLayout.SOUTH);

        frame = new JFrame();
        frame.setContentPane(p1);
        frame.setVisible(true);
        frame.pack();
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    @Override
    public void actionPerformed(ActionEvent e) {

        size += 2;
        Font newFont = new Font("Courier", Font.PLAIN, size);
        txt.setFont(newFont);
        frame.revalidate();
        frame.pack();
    }

    /**
     * @param args
     */
    public static void main(String[] args) {

        MyFrame myGUI = new MyFrame(); 
        myGUI.BuildMainGUI();
    }
}
4

1 に答える 1