Eric Lang
Eric Lang

Reputation: 274

Why might a JTextArea made scrollable, fail to be scrollable?

Does anyone see an issue with my code that might prevent JTextArea to become scrollable when you query data which expands it's bounds, it also seems that some words are getting cut in half, but the JScrollPane, which is supposedly supposed to fix the issue is failing at doing so.

package guiprojj;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Map;

import javax.swing.*;

import com.eclipsesource.json.JsonObject;
import com.google.gson.JsonParser;
import com.json.parsers.JSONParser;
import com.json.parsers.JsonParserFactory;


public class gui {
    public static void main(String[] args)
    {
        JFrame maingui = new JFrame("Gui");
        JButton enter = new JButton("Enter");
        final JTextArea movieinfo = new JTextArea(5,20);
        final JTextField movietext = new JTextField(16);
        final JScrollPane scrolll = new JScrollPane(movieinfo);
        JPanel pangui = new JPanel();
        pangui.add(movietext);
        pangui.add(enter);
        scrolll.add(movieinfo);
        pangui.add(movieinfo);
        maingui.setResizable(false);
        maingui.setVisible(true);
        movieinfo.setLineWrap(true);
        movieinfo.setEditable(false);
        maingui.add(pangui);
        scrolll.getPreferredSize();
        //pangui.setPreferredSize(new Dimension(300, 150));
        //pangui.add(scrolll, BorderLayout.CENTER);
        //movieinfo.add(scrolll);
        maingui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        maingui.pack();
        enter.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e)  
            {
                System.out.println(Test.getMovieInfo(movietext.getText()));
                 JsonParserFactory factory=JsonParserFactory.getInstance();
                 JSONParser parser=factory.newJsonParser();
                 Map jsonData=parser.parseJson(Test.getMovieInfo(movietext.getText()));
                 String Title = (String)jsonData.get("Title");
                 String Year = (String)jsonData.get("Year");
                 String Plot = (String)jsonData.get("Plot");
                 movieinfo.setText("Title: "+Title+"\nYear: "+ Year +"\nPlot: "+Plot);
            }
            });

        }
}

Upvotes: 3

Views: 19130

Answers (2)

camickr
camickr

Reputation: 324118

final JTextArea movieinfo = new JTextArea(5,20);
final JScrollPane scrolll = new JScrollPane(movieinfo);

JPanel pangui = new JPanel();
//scrolll.add(movieinfo);
//pangui.add(movieinfo);
pangui.add(scroll);

A component can only have a single parent. You create the scrollpane with the text area which is good. But then you add the textarea to the panel, which is bad since the text area gets removed from the scrollpane).

You need to add the scrollpane to the panel since this is the component that contains the text area.

Upvotes: 11

JNL
JNL

Reputation: 4703

I think you should use a ScrollPane.

JTextArea ta = new JTextArea();
JScrollPane sp = new JScrollPane(ta);

Upvotes: 1

Related Questions