Search code examples
javaswingawt

Advice required in making a simple text editor using the Java Swing Class Library


I am a java beginner and I want to make a simple text editor but I find the following problem. The JTextArea doesn't re-size along with the JFrame. Here is my code :

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

public class textEditor
{
JFrame frame;
JTextArea textArea;
JScrollPane scrollPane;
//JButton button;

public textEditor()             //Constructor
{
    frame = new JFrame("Title of the frame!");
    frame.setLayout(new FlowLayout());
    textArea = new JTextArea("");
    scrollPane = new JScrollPane(textArea);

            scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);

    //button = new JButton();


}

public void launchFrame()
{
    //Adding Text Area and ScrollPane to the Frame
    frame.getContentPane().add(textArea);
    frame.getContentPane().add(scrollPane);

    //Make the Close button to close the frame when clicked
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //Displaying the Frame
    frame.setVisible(true);
    frame.pack();
}

public static void main(String args[])
{
    textEditor window=new textEditor();
    window.launchFrame();
}
}

Please don't forget that I'm a beginner so please give me a solution in simple words.


Solution

  • The JTextArea doesn't re-size along with the JFrame as you are using a FlowLayout manager which uses preferred sizes of components instead of expanding them to fill the full space of the container. To fix you can remove the line:

    frame.setLayout(new FlowLayout());
    

    JFrame containers use BorderLayout manager by default, which will do the necessary sizing that you are looking for.

    Also remove the line

    frame.getContentPane().add(textArea);
    

    as only the JScrollPane is required to be added to the frame.