Unable to make the JTextArea scrollable..!

前端 未结 3 1691
再見小時候
再見小時候 2021-01-24 15:32

Here is my code:

final JTextArea textArea = new JTextArea();
textArea.setFont(new Font(\"MS UI Gothic\", Font.PLAIN, 13));
textArea.setLineWrap(true);
textArea.s         


        
相关标签:
3条回答
  • 2021-01-24 16:14

    I don't think you need to do contentPane.add(textArea);. It is this line that is causing the problem. Comment out this and your code should work fine.

    See this answer, it might help you.

    The following code runs fine at my place :

    final JTextArea textArea = new JTextArea();
            textArea.setFont(new Font("MS UI Gothic", Font.PLAIN, 13));
            textArea.setLineWrap(true);
            textArea.setBounds(77, 310, 474, 136);
    
            JScrollPane sbrText = new JScrollPane(textArea);
            sbrText.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            frame.getContentPane().add(sbrText);//contentPane.add(sbrText);
            frame.setVisible(true);
    

    If your code is not running fine then you must have some other error probably related to your contentpane.

    0 讨论(0)
  • 2021-01-24 16:15

    Here I have done, the same thingy using Nested Layout, have a look at the code example :

    import java.awt.*;
    import javax.swing.*;
    
    public class WelcomeExample
    {
        private JPanel headerPanel;
        private JButton logoutButton;
    
        private JPanel leavePanel;
        private JRadioButton casualRButton;
        private JRadioButton specialRButton;
        private JRadioButton sickRButton;
        private JRadioButton privilegeRButton;
        private ButtonGroup radioButtonGroup;
    
        private JTextField leaveDaysField;
        private JButton checkLeaveButton;
    
        private JTextArea notesArea;
        private JScrollPane notesScroller;
    
        private JButton applyLeaveButton;
    
        private String headerText = "<html><body><h1><font " + 
                "color=\"red\">Welcome : </font><font color" +
                "=\"blue\">Code Zero</font></h1></body></html>";
    
        private void displayGUI()
        {
            JFrame frame = new JFrame("Welcome");
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    
            JPanel contentPane = new JPanel();
            contentPane.setLayout(new BorderLayout(5, 5));
            contentPane.setBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5));
    
            headerPanel = getHeaderPanel();
            leavePanel = getLeavePanel();
    
            contentPane.add(headerPanel, BorderLayout.PAGE_START);
            contentPane.add(leavePanel, BorderLayout.CENTER);
            contentPane.add(getApplyPanel(), BorderLayout.PAGE_END);
    
            frame.setContentPane(contentPane);
            frame.pack();
            frame.setLocationByPlatform(true);
            frame.setVisible(true);
        }
    
        private JPanel getHeaderPanel()
        {
            JPanel panel = new JPanel();
            panel.setLayout(new BorderLayout(5, 5));
            panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
            JLabel headerLabel = new JLabel(headerText, JLabel.CENTER);
            JPanel buttonPanel = new JPanel();
            logoutButton = new JButton("Logout");
            buttonPanel.add(logoutButton);
            panel.add(headerLabel, BorderLayout.CENTER);
            panel.add(buttonPanel, BorderLayout.LINE_END);
            panel.add(new JSeparator(
                SwingConstants.HORIZONTAL), BorderLayout.PAGE_END);
    
            return panel;
        }
    
        private JPanel getLeavePanel()
        {
            JPanel panel = new JPanel();
            panel.setLayout(new BorderLayout(5, 5));
            panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
    
            JPanel leaveHeaderPanel = new JPanel();
            leaveHeaderPanel.setLayout(new GridLayout(0, 1, 5, 5));
            leaveHeaderPanel.setBorder(
                BorderFactory.createTitledBorder("Choose a leave type : "));
            JPanel leaveTypePanel = new JPanel();
            leaveTypePanel.setLayout(new FlowLayout(
                                    FlowLayout.LEFT, 5, 5));
            casualRButton = new JRadioButton("Casual Leave");
            specialRButton = new JRadioButton("Special Leave");
            sickRButton = new JRadioButton("Sick Leave");
            privilegeRButton = new JRadioButton("Privilege Leave");
    
            radioButtonGroup = new ButtonGroup();
            radioButtonGroup.add(casualRButton);
            radioButtonGroup.add(specialRButton);
            radioButtonGroup.add(sickRButton);
            radioButtonGroup.add(privilegeRButton);
    
            leaveTypePanel.add(casualRButton);
            leaveTypePanel.add(specialRButton);
            leaveTypePanel.add(sickRButton);
            leaveTypePanel.add(privilegeRButton);
    
            JPanel applyLeavePanel = new JPanel();
            applyLeavePanel.setLayout(new FlowLayout(
                                    FlowLayout.LEFT, 5, 5));
            JLabel applyLeaveLabel = new JLabel(
                    "Apply for (No. of days) : ", JLabel.CENTER);
            leaveDaysField = new JTextField(5);
            checkLeaveButton = new JButton("Check Leave Availability");
    
            applyLeavePanel.add(applyLeaveLabel);
            applyLeavePanel.add(leaveDaysField);
            applyLeavePanel.add(checkLeaveButton);
    
            leaveHeaderPanel.add(leaveTypePanel);
            leaveHeaderPanel.add(applyLeavePanel);
    
            notesArea = new JTextArea(10, 10);
            notesScroller = new JScrollPane();
            notesScroller.setBorder(
                BorderFactory.createTitledBorder(
                    "Leave Note (Max. 200 Characters) : "));
            notesScroller.setViewportView(notesArea);
    
            panel.add(leaveHeaderPanel, BorderLayout.PAGE_START);
            panel.add(notesScroller, BorderLayout.CENTER);
    
            return panel;
        }
    
        private JPanel getApplyPanel()
        {
            JPanel panel = new JPanel();
            applyLeaveButton = new JButton("Apply");
            panel.add(applyLeaveButton);
    
            return panel;
        }
    
        public static void main(String[] args)
        {
            Runnable runnable = new Runnable()
            {
                @Override
                public void run()
                {
                    new WelcomeExample().displayGUI();
                }
            };
            EventQueue.invokeLater(runnable);
        }
    }
    

    OUTPUT :

    WELCOME EXAMPLE

    0 讨论(0)
  • 2021-01-24 16:23

    Ok...I finally got it to work...I specified the same set bounds in the scroll pane instead of the text area.. Here is the code.!!! ^_^

            final JTextArea textArea = new JTextArea();
            textArea.setFont(new Font("MS UI Gothic", Font.PLAIN, 13));
            textArea.setLineWrap(true);
            //textArea.setBounds(77, 310, 474, 136);
    
            JScrollPane scroll = new JScrollPane (textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);         
            scroll.setBounds(77, 310, 474, 136);
            contentPane.add(scroll);
    

    Here are the screenshots:

    Previous: http://oi40.tinypic.com/11jyum0.jpg
    Now: http://oi44.tinypic.com/2s9vdvt.jpg

    0 讨论(0)
提交回复
热议问题