请问这个JTextArea 的滚动条怎么不跟着滚动啊

(1)在JTextArea插入最后一条消息之后,使用selectAll()将光标强制移动到JTextArea的最后,实现滚动条的自动滚动。(Aviva中采用的方式)

(2)在JTextArea插入最后一条消息之后,使用(JTextArea)recvArea.setCaretPosition(recvArea.getText().length()),将光标移到最后,实现滚动条的自动滚动。

(3)在JTextArea加载了自动滚动条JScroll之后,将JTextArea加入到JScrolPanel的ViewPort中: (有一些Bug,使得图像有点闪烁)
recvScrollPane.getViewport().add(recvArea, null);
然后在JTextArea插入最后一条新消息之后,将滚动条的Viewport重新设置到最底端的位置:
int height = 20;
Point p = new Point();
p.setLocation(0, recvArea.getLineCount() * height);
recvScrollPane.getViewport().setViewPosition(p);

import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class ScrollTextArea extends JFrame {

    private static final long serialVersionUID = 1L;

    private JPanel jContentPane = null;

    private JScrollPane jScrollPane = null;

    private JTextArea jTextArea = null;

    /**
    * This method initializes jScrollPane
    *
    * @return javax.swing.JScrollPane
    */
    private JScrollPane getJScrollPane() {
        if (jScrollPane == null) {
            jScrollPane = new JScrollPane();
            jScrollPane.setBounds(new Rectangle(0, 2, 290, 144));
            jScrollPane.setViewportView(getJTextArea());
        }
        return jScrollPane;
    }

    /**
    * This method initializes jTextArea
    *
    * @return javax.swing.JTextArea
    */
    private JTextArea getJTextArea() {
        if (jTextArea == null) {
            jTextArea = new JTextArea();
        }
        return jTextArea;
    }

    /**
    * @param args
    */
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                ScrollTextArea thisClass = new ScrollTextArea();
                thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                thisClass.setVisible(true);
            }
        });
    }

    /**
    * This is the default constructor
    */
    public ScrollTextArea() {
        super();
        initialize();
    }

    /**
    * This method initializes this
    *
    * @return void
    */
    private void initialize() {
        this.setSize(300, 200);
        this.setContentPane(getJContentPane());
        this.setTitle("JFrame");
    }

    /**
    * This method initializes jContentPane
    *
    * @return javax.swing.JPanel
    */
    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(null);
            jContentPane.add(getJScrollPane(), null);
        }
        return jContentPane;
    }
 

 

 

 

   private void init()
    {
        setBounds(
0, 0, 300, 150);
       
       
final JScrollPane sp = new JScrollPane(ta);
        getContentPane().add(sp,
"Center");
       
       
for (int i = 0; i <= 10; i++)
        {
            ta.append(i
+ "/n");
        }
       
        JScrollBar   sb  
=   sp.getVerticalScrollBar();  
        sb.setValue(sb.getMaximum());  

       
//    TimerTask task = new TimerTask(){
       
//      public void run(){
       
//        ta.append("Time: " + (System.currentTimeMillis() / 1000));
       
//        scrollAndSetCursor();
       
//      }
       
//    };
    }

### 回答1: 可以通过以下步骤设置Java JTextArea滚动条: 1. 创建一个JScrollPane对象,将JTextArea作为参数传递给它。 2. 将JScrollPane添加到JFrame或其他容器中。 3. 设置JTextArea的行数和列数,以便JScrollPane可以自动调整大小。 4. 设置JScrollPane的滚动条选项,例如垂直滚动条、水平滚动条或两者都有。 5. 最后,将JTextArea添加到JScrollPane中。 示例代码: JTextArea textArea = new JTextArea(); textArea.setLineWrap(true); textArea.setWrapStyleWord(true); JScrollPane scrollPane = new JScrollPane(textArea); scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); JFrame frame = new JFrame(); frame.add(scrollPane); frame.pack(); frame.setVisible(true); 这将创建一个带有垂直滚动条JTextArea,并将其添加到一个JScrollPane中,然后将JScrollPane添加到JFrame中。 ### 回答2: 在Java中,我们经常需要在GUI界面中使用文本输入框(JTextArea)来允许用户输入文字或显示一些信息。但是,当文本内容过多时,可能会导致输入框的大小无法容纳所有文本内容,因此我们需要使用滚动条来解决这个问题。 在Java中,我们可以使用JScrollPane类来添加滚动条。JScrollPane是一个包装器,它可以将JTextArea嵌入到其中,并为其提供一个滚动条。要添加滚动条,我们需要按照以下步骤进行: 步骤1:创建一个JTextArea组件。例如: JTextArea textArea = new JTextArea(); 步骤2:创建一个JScrollPane对象并将JTextArea添加到其中。例如: JScrollPane scrollPane = new JScrollPane(textArea); 步骤3:将JScrollPane添加到容器中。例如: frame.add(scrollPane); 其中,frame是容器,可以是JPanel或JFrame等。 这些步骤可以在构建GUI界面时完成,也可以在运行时进行。此外,我们还可以对滚动条进行设置,例如为滚动条添加水平滚动条或垂直滚动条。 使用JScrollPane来添加滚动条可以使我们的GUI界面更加美观和具有可扩展性,同时也可以提高用户体验。 ### 回答3: 在Java中,JTextArea是一个用于显示多行文本的Swing组件。当文本超过JTextArea的可见区域时,使用滚动条是一种常见的解决方案。以下是设置滚动条的步骤。 首先,我们需要创建一个JTextArea对象,并将其添加到JScrollPane中。JScrollPane是一个Swing组件,它自动添加水平和垂直滚动条,并包含一个JViewport,该视口显示JTextArea内容。以下是创建JTextArea和JScrollPane的示例代码: ```java JTextArea textArea = new JTextArea(); JScrollPane scrollPane = new JScrollPane(textArea); ``` 接下来,我们需要为JScrollPane设置首选大小,并使用JFrame将其添加到用户界面中。以下是添加JScrollPane到JFrame的示例代码: ```java scrollPane.setPreferredSize(new Dimension(200, 200)); frame.add(scrollPane); ``` 在接下来的步骤中,我们需要设置JScrollPane的滚动策略。JScrollPane提供了多种滚动策略,包括: - JScrollPane.VERTICAL_SCROLLBAR_ALWAYS:始终显示垂直滚动条。 - JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED:仅在需要时显示垂直滚动条。 - JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS:始终显示水平滚动条。 - JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED:仅在需要时显示水平滚动条。 我们可以使用setVerticalScrollBarPolicy()和setHorizontalScrollBarPolicy()方法设置滚动策略。以下是使用VERTICAL_SCROLLBAR_ALWAYS策略的示例代码: ```java scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); ``` 最后,我们需要将文本添加到JTextArea中。我们可以使用setText()方法设置文本,也可以使用append()方法将新文本添加到现有文本的末尾。以下是向JTextArea中添加文本的示例代码: ```java textArea.setText("Hello, World!"); textArea.append("\nThis is a new line of text."); ``` 在上面的代码中,第一行使用setText()方法将“Hello, World!”文本设置为JTextArea中的唯一文本。第二行使用append()方法将字符串“\nThis is a new line of text.”添加到现有文本的末尾。 通过以上步骤,我们可以成功设置JScrollPane的滚动条。请注意,JTextArea对象本身不提供滚动条。要添加滚动条,请将JTextArea添加到JScrollPane中。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值