Java的:添加滚动到文本区(Java :Add scroll into text area)

2019-06-23 16:21发布

我怎样才能滚动条添加到我的文本区域。 我曾尝试使用此代码,但它不工作。

            middlePanel=new JPanel();
        middlePanel.setBorder(new TitledBorder(new EtchedBorder(), "Display Area"));

        // create the middle panel components

        display = new JTextArea(16, 58);
        display.setEditable(false); // set textArea non-editable
        scroll = new JScrollPane(display);
        scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

        //Add Textarea in to middle panel
        middlePanel.add(scroll);
        middlePanel.add(display);

谢谢

Answer 1:

添加到JTextArea中JScrollPane的位置后:

scroll = new JScrollPane(display);

你不需要重新添加到其他容器中像你这样的:

middlePanel.add(display);

只是删除代码的最后一行,它会正常工作。 像这样:

    middlePanel=new JPanel();
    middlePanel.setBorder(new TitledBorder(new EtchedBorder(), "Display Area"));

    // create the middle panel components

    display = new JTextArea(16, 58);
    display.setEditable(false); // set textArea non-editable
    scroll = new JScrollPane(display);
    scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

    //Add Textarea in to middle panel
    middlePanel.add(scroll);

JScrollPane的只是另一个容器其在需要时周围放置你的组件滚动条和也有自己的布局。 所有你需要做的,当你想换什么成卷轴只是将它传递到JScrollPane的构造函数:

new JScrollPane( myComponent ) 

或设定图像这样:

JScrollPane pane = new JScrollPane ();
pane.getViewport ().setView ( myComponent );

额外:

这里是完全工作的例子,因为你还没有得到它的工作:

public static void main ( String[] args )
{
    JPanel middlePanel = new JPanel ();
    middlePanel.setBorder ( new TitledBorder ( new EtchedBorder (), "Display Area" ) );

    // create the middle panel components

    JTextArea display = new JTextArea ( 16, 58 );
    display.setEditable ( false ); // set textArea non-editable
    JScrollPane scroll = new JScrollPane ( display );
    scroll.setVerticalScrollBarPolicy ( ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS );

    //Add Textarea in to middle panel
    middlePanel.add ( scroll );

    // My code
    JFrame frame = new JFrame ();
    frame.add ( middlePanel );
    frame.pack ();
    frame.setLocationRelativeTo ( null );
    frame.setVisible ( true );
}

这里是你会得到什么:



Answer 2:

我天真的假设是,滚动窗格的大小将自动确定...

实际工作对我来说是明确seeting JScrollPane中的边界唯一的解决办法:

import javax.swing.*;

public class MyFrame extends JFrame {

    public MyFrame()
    {
        setBounds(100, 100, 491, 310);
        getContentPane().setLayout(null);

        JTextArea textField = new JTextArea();
        textField.setEditable(false);

        String str = "";
        for (int i = 0; i < 50; ++i)
            str += "Some text\n";
        textField.setText(str);

        JScrollPane scroll = new JScrollPane(textField);
        scroll.setBounds(10, 11, 455, 249);                     // <-- THIS

        getContentPane().add(scroll);
        setLocationRelativeTo ( null );
    }
}

也许这将帮助一些未来的访客:)



Answer 3:

尝试添加以下两行代码。 我希望它会工作。 它的工作对我来说:)

display.setLineWrap(true);
display.setWrapStyleWord(true);

输出的图像被如下所示



文章来源: Java :Add scroll into text area