alexdr3437
alexdr3437

Reputation: 61

How to stop JTextFields from running off the Frame

I want to stop the text field from running off the GUI or print the text field on a new "line".

Here is the code:

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

public class Window extends JFrame {
    private JTextField TextField0;
    private JTextField TextField1;
    private JCheckBox CheckBox0;
    private JPanel panel;

    //CONSTRUCTOR
    public Window() {
        super("Checkbox");
        setLayout(new FlowLayout());

        panel = new JPanel();
        add(panel, BorderLayout.CENTER);

        TextField0 = new JTextField("Add field",15);
        panel.add(TextField0);
        TextField1 = new JTextField("Add field", 15);

        CheckBox0 = new JCheckBox("");

        HandlerClass handler = new HandlerClass();
        TextField0.addActionListener(handler);
    }

    public class HandlerClass implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            if(event.getSource()==TextField0) {
                CheckBox0.setText(String.format("%s",event.getActionCommand()));
                panel.remove(TextField0);
                panel.add(CheckBox0);
                panel.add(TextField1);
                panel.revalidate();
                panel.repaint();
            }
        }
    }
}

Upvotes: 1

Views: 819

Answers (2)

MadProgrammer
MadProgrammer

Reputation: 347184

There's not really anything you can do...

JTextField will allow the text to overflow the viewable area of the textfield (trimming the text on the screen)

You could try using a JTextArea, which supports multi line text

You could also try packing the frame

enter image description here

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestTextField {

    public static void main(String[] args) {
        new TestTextField();
    }

    public TestTextField() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                String text = "This is a long piece of text that seems to go on and on and on and on an on....and some more...";

                JTextField field = new JTextField(10);
                JTextArea ta1 = new JTextArea(10, 2);
                JTextArea ta2 = new JTextArea(10, 2);

                field.setText(text);
                ta1.setText(text);
                ta2.setText(text);

                configure(ta1);
                configure(ta2);

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new GridBagLayout());
                GridBagConstraints gbc = new GridBagConstraints();
                gbc.gridwidth = GridBagConstraints.REMAINDER;
                gbc.weightx = 1;
                gbc.fill = GridBagConstraints.HORIZONTAL;
                frame.add(field, gbc);
                frame.add(ta1, gbc);
                frame.add(new JScrollPane(ta2), gbc);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }

            protected void configure(JTextArea ta) {
                ta.setWrapStyleWord(true);
                ta.setLineWrap(true);
            }

        });
    }    
}

Upvotes: 2

7stud
7stud

Reputation: 48599

Set the layout of your panel to a Boxlayout instead of a Borderlayout. See the following link for the different layouts and how to use them:

http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

Upvotes: 0

Related Questions