Chinaunix

标题: 请教:设置文本框中光标的位置 [打印本页]

作者: 白色乌鸦    时间: 2004-11-01 16:57
标题: 请教:设置文本框中光标的位置
我有个文本框,这个文本框中初始化了一串字符,我想打开窗口时,默认光标位置正好紧跟在那一串字符的后面.

请问:可实现吗?     

能不能大致说下呀?

谢谢     
作者: sakulagi    时间: 2004-11-02 08:52
标题: 请教:设置文本框中光标的位置
是TextField还是JTextField?
作者: sakulagi    时间: 2004-11-02 08:52
标题: 请教:设置文本框中光标的位置
如果是JTextField可以用:
JTextField.setCaretPosition(JTextField.getText().length())
作者: 白色乌鸦    时间: 2004-11-02 09:10
标题: 请教:设置文本框中光标的位置
她用的是JTextArea,我查了下jdk文档,JtextArea没有继承这个方法,
作者: sakulagi    时间: 2004-11-02 09:31
标题: 请教:设置文本框中光标的位置

  1. import java.awt.BorderLayout;
  2. import java.awt.Component;
  3. import java.awt.HeadlessException;
  4. import java.awt.TextField;
  5. import java.awt.event.WindowAdapter;
  6. import java.awt.event.WindowEvent;

  7. import javax.swing.JFrame;
  8. import javax.swing.JTextArea;
  9. import javax.swing.JTextField;


  10. public class JTextFieldCursorTest extends JFrame {

  11.         private static final String FIELD_CONTENT = "Cursor should reside at the end of line";

  12.         /**
  13.          * @param title
  14.          * @throws java.awt.HeadlessException
  15.          */
  16.         public JTextFieldCursorTest(String title) throws HeadlessException {
  17.                 super(title);
  18.                 //uncomment 1,2 or 3 to test caret position for JTextField, TextField
  19.                 // or JtextArea
  20.                 //getContentPane().add(getJtf(), BorderLayout.NORTH); //1
  21.                 //getContentPane().add(getTf(), BorderLayout.SOUTH); //2
  22.                 getContentPane().add(getJta(), BorderLayout.CENTER); //3
  23.                 setDefaultCloseOperation(DISPOSE_ON_CLOSE);
  24.         }

  25.         /**
  26.          * @return
  27.          */
  28.         private Component getJta() {
  29.                 JTextArea jta = new JTextArea();
  30.                 jta.setText(FIELD_CONTENT + " \n\t- JTextArea");
  31.                 jta.setCaretPosition(jta.getText().length());
  32.                 return jta;
  33.         }

  34.         /**
  35.          * @return
  36.          */
  37.         private Component getTf() {
  38.                 final TextField tf = new TextField();
  39.                 tf.setText(FIELD_CONTENT + " - TextField");
  40.                 this.addWindowListener(new WindowAdapter() {
  41.                         public void windowOpened(WindowEvent e) {
  42.                                 tf.setCaretPosition(tf.getText().length());
  43.                         }
  44.                 });
  45.                 return tf;
  46.         }

  47.         /**
  48.          * @return
  49.          */
  50.         private Component getJtf() {
  51.                 JTextField jt = new JTextField();
  52.                 jt.setText(FIELD_CONTENT + " - JTextField");
  53.                 return jt;
  54.         }

  55.         public static void main(String[] args) {
  56.                 JTextFieldCursorTest jtfct = new JTextFieldCursorTest(
  57.                                 "TextComponent Cursor Test");
  58.                 jtfct.setBounds(100, 100, 360, 240);
  59.                 jtfct.show();

  60.         }
  61. }
复制代码

作者: 白色乌鸦    时间: 2004-11-02 09:45
标题: 请教:设置文本框中光标的位置
非常感谢.

呵呵
作者: 白色乌鸦    时间: 2004-11-02 09:54
标题: 请教:设置文本框中光标的位置
在TextComponent.java中有这样一段代码:
TextComponentPeer peer = (TextComponentPeer)this.peer;
        if (peer != null) {
            peer.setCaretPosition(position);
        } else {
            throw new IllegalComponentStateException("Cannot set caret position until after the peer has been created";
        }
    }

我想问的是这里面peer指的是什么意思呀?
作者: sakulagi    时间: 2004-11-02 10:25
标题: 请教:设置文本框中光标的位置
http://blog.csdn.net/chinasilver/archive/2003/07/07/20997.aspx
这个讲的比较简单。
作者: 白色乌鸦    时间: 2004-11-03 09:22
标题: 请教:设置文本框中光标的位置
谢谢了,

下面是我截的两行代码(紧连的)

1  this.getTextArea().setText("Create Procedure ";
2  this.getTextArea().setCaretPosition(this.getTextArea().getText().
    length());

第一行没问题,运行到第二行抛出异常,我跟踪出来的就是在下面地方抛出的
TextComponentPeer peer = (TextComponentPeer)this.peer;
        if (peer != null) {
            peer.setCaretPosition(position);
        } else {
            throw new IllegalComponentStateException("Cannot set caret position until after the peer has been created";

谁能帮我解释下

这段代码的意图吗?

这里判断 peer为不为空的具体意思是什么呀?

    
作者: 白色乌鸦    时间: 2004-11-04 19:48
标题: 请教:设置文本框中光标的位置
为什么在那个地方 会产生 peer为空呢?

上面的peer就不会呢?

想不出来呀
作者: 白色乌鸦    时间: 2004-11-04 20:43
标题: 请教:设置文本框中光标的位置
偶错了

peer在上面的时候就是为空的,只是settext方法没抛出异常而已
作者: sakulagi    时间: 2004-11-04 20:58
标题: 请教:设置文本框中光标的位置
这样深入探讨一下还是挺有意思的。
作者: 白色乌鸦    时间: 2004-11-04 21:13
标题: 请教:设置文本框中光标的位置
现在我不明白的就是peer的值是怎样得来,

怎样才能使peer的值不为空

是不是有可能是因为 对象没有构造出来 peer的值就是空的呀?

TextComponentPeer好像只是一个接口,里面给出了一些属性的声明.

偶去试试偶的想法再过来
作者: 白色乌鸦    时间: 2004-11-04 22:15
标题: 请教:设置文本框中光标的位置
原帖由 "sakulagi" 发表:
如果是JTextField可以用:
JTextField.setCaretPosition(JTextField.getText().length())


我想问:如果是TextField 就不可以了吗?

为什么呢??     
作者: sakulagi    时间: 2004-11-05 21:20
标题: 请教:设置文本框中光标的位置
TextField可以啊。
我的那个程序里就可以啊。只不过调用这个函数的时机不太一样。
作者: 白色乌鸦    时间: 2004-11-05 21:28
标题: 请教:设置文本框中光标的位置
原帖由 "sakulagi" 发表:
TextField可以啊。
我的那个程序里就可以啊。只不过调用这个函数的时机不太一样。


的确是这样的

偶用TextField 的时候 就会有peer的问题 因为是重量构件的关系 ,在TextField中的设置光标的方法中有判断 peer为不为空

但是JTextField是没有peer的问题的

你能不能说下调用TextField那个设置光标的方法是要在什么时机呀?这样我可以多多对照下.     
谢了哈
作者: sakulagi    时间: 2004-11-05 21:37
标题: 请教:设置文本框中光标的位置
你看我的那个代码的getTf()这个方法:
在主窗口已经显示了之后就可以调用setCaretPosition()
作者: 白色乌鸦    时间: 2004-11-12 16:52
标题: 请教:设置文本框中光标的位置
恩,
今天就仔细看了下你的代码,

我觉得你的那个方法的确很好哦,

我就没想到. 学习中.

谢了.
作者: sakulagi    时间: 2004-11-13 20:54
标题: 请教:设置文本框中光标的位置
不客气,希望以后经常交流啊。
作者: 白色乌鸦    时间: 2004-11-16 09:08
标题: 请教:设置文本框中光标的位置
偶是新手,以后肯定会经常来麻烦大家滴 ^_^




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2