addxxxlistener
and do nothing when key press but -> <- etc

解决方案 »

  1.   

    import java.awt.BorderLayout;import javax.swing.JFrame;
    import javax.swing.JTextField;
    import javax.swing.text.AttributeSet;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.PlainDocument;
    public class ReadOnlyField
    {
        public static void main(String[] args)
        {
            ReadOnlyDocument doc = new ReadOnlyDocument();
            doc.setText("the read only text content");
            JTextField field = new JTextField(doc, null, 20);
            JFrame frame = new JFrame("test");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(field, BorderLayout.NORTH);
            frame.setSize(320, 240);
            frame.setLocation(240, 180);
            frame.setVisible(true);
        }    private static class ReadOnlyDocument extends PlainDocument
        {
            public void insertString(int offs, String str, AttributeSet a)
            {
            }        public void remove(int offs, int len)
            {
            }        public void setText(String text)
            {
                try
                {
                    super.remove(0, getLength());
                    super.insertString(0, text, null);
                }
                catch (BadLocationException e)
                {
                    //never happen
                }
            }
        }
    }
      

  2.   

    可以用JTextField 的对象.SetEnabled(),SetVisible()来设置
      

  3.   

    import javax.swing.JFrame;
    import javax.swing.JTextField;public class ReadOnlyField{
        public static void main(String[] args){
            JFrame frame = new JFrame("test");
            JTextField field = new JTextField("this is a test for read only textfield,you can check it", 10);
            field.setEditable(false);
            field.setToolTipText(field.getText());
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(field, BorderLayout.NORTH);
            frame.setSize(200, 100);
            frame.setLocation(300, 220);
            frame.setVisible(true);
        }
    }
      

  4.   

    严重感谢各位!
    再请教:ligenlee兄:
    我想我明白你的思路,你是想通过按键盘上的左右箭头键来滚动文本,但如何在程序内滚动TextField内的文本,我还不知道。cbhyk兄:
    谢谢你!可是我水平太底,还没看懂,我继续看,如果你能解释一下程序更好。cxyPioneer兄:
    你说的好像挺简单,不过我不知道应如何实现,能说细点吗?ShellMarx兄:
    目前我最感兴趣的就是你说的方法了,虽然你的方法是个变通的方法,但实现起来比较容易。你是想通过工具提示条ToolTipText来显示TextField内的文字是吗?可是如果TextField内的文字的长度超过屏幕的宽度呢?它会自动在ToolTipText中分成两行显示吗?再次感谢赐教的各位!
      

  5.   

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.text.*;
    class NoneEditableField extends JTextField{
    public NoneEditableField(String s,int columns){
    super(s,columns);
    setEditable(false);
    addFocusListener(new FocusListener(){
    int caretPosition=0;
    public void focusGained(FocusEvent e){
    if(!getCaret().isVisible()){
    getCaret().setVisible(true);     
    setCaretPosition(caretPosition);
    }
    }
    public void focusLost(FocusEvent e){
    if(getCaretPosition()>0)
    caretPosition=getCaretPosition();
    }
    });



    }
    public NoneEditableField(){
    this(new String(),0);
    }
    public NoneEditableField(int columns){
    this(new String(),columns);
    }
    public NoneEditableField(String s){
    this(s,0);
    }}public class ReadonlyField{
        public static void main(String[] args){
            JFrame frame = new JFrame("test");
            NoneEditableField field = new NoneEditableField("this is a test for read only textfield,you can check it", 10);
           
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(field,BorderLayout.CENTER);
            frame.setSize(200, 100);
            frame.setLocation(300, 220);
            frame.setVisible(true);
        }
    }
      

  6.   

    Class NoneEditableField is what you need, 
    Class ReadonlyField copied from ShellMarx, just for test.
      

  7.   

    JTextField txt=new JTextField(20);
    txt.setBackground(...);
    txt.setEditable(false);
      

  8.   

    import javax.swing.*;public class ReadOnlyText extends JTextField {
    public ReadOnlyText(int num) {
    super(num);
    setEditable(false);
    }
    public ReadOnlyText(String str,int num) {
    super(str,num);
    setEditable(false);
    }
    }