JTextField
是一个轻量级组件,它允许编辑单行文本。
通过添加 TextEvent
的 TextListener
,可以监视 java.awt.TextField
的更改。在基于 JTextComponent
的组件中,通过 DocumentEvent
将更改从模型传播到 DocumentListeners
。DocumentEvent
给出了更改的位置和更改种类(如果需要)。代码片段可能看起来如下所示:
DocumentListener myListener = ??;
JTextField myArea = ??;
myArea.getDocument().addDocumentListener(myListener);
构造方法摘要 | |
---|---|
JTextField() 构造一个新的 TextField 。 |
|
JTextField(Document doc, String text, int columns) 构造一个新的 JTextField ,它使用给定文本存储模型和给定的列数。 |
|
JTextField(int columns) 构造一个具有指定列数的新的空 TextField 。 |
|
JTextField(String text) 构造一个用指定文本初始化的新 TextField 。 |
|
JTextField(String text, int columns) 构造一个用指定文本和列初始化的新 TextField 。 |
运行样式:如下图中间部分的框,有固定长度,可以一直输入。
import java.awt.*;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
public class TextFielTest extends JFrame {
private JTextField textfd;
private Container container;
private JPanel bottom, center;
private JLabel label, label1, label2;
private JButton bt[];
private JTextField textField, textField1;
/**
* 窗体构造方法:
*/
public TextFielTest() throws HeadlessException {
super("神奇文本框");
this.setSize(300, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
container = this.getContentPane();
InitPanel();
InitLabel();
InitButton();
InitTextField();
}
/*
* 初始化panel,center用于装两个TextField
* bottom用于装3个label,label用于显示
*/
private void InitPanel() {
bottom = new JPanel();
center = new JPanel();
bottom.setBackground(Color.cyan);
center.setBackground(Color.DARK_GRAY);
container.add(bottom, BorderLayout.SOUTH);
container.add(center, BorderLayout.CENTER);
}
/**
* 初始化label,讲她们加入bottom中。
*/
private void InitLabel() {
label = new JLabel("hello");
label1 = new JLabel("hello1");
label2 = new JLabel("hello2");
bottom.add(label);
bottom.add(label1);
bottom.add(label2);
}
/**
* 初始化button,讲她们加入窗体中,显现出BorderLayout的结构
*/
private void InitButton() {
bt = new JButton[5];
for (int i = 0; i < bt.length; i++) {
bt[i] = new JButton("" + i);
}
container.add(bt[0], BorderLayout.NORTH);
container.add(bt[1], BorderLayout.WEST);
container.add(bt[2], BorderLayout.EAST);
// container.add(bt[3],BorderLayout.CENTER);
}
/**
* 初始化TextField,将她们添加到center中 并为她们添加监听器
*/
private void InitTextField() {
textField = new JTextField(10);
textField1 = new JTextField(5);
textField.getDocument().addDocumentListener(new textListener());
textField1.getDocument().addDocumentListener(new textListener());
textField.setBackground(Color.orange);
center.add(textField1);
center.add(textField);
}
/**
* 文本框监听器
* 实现文本改变监听器
* @author Administrator
*
*/
class textListener implements DocumentListener {
@Override
public void insertUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
Document doc = e.getDocument();
try {
label.setText(doc.getText(0, doc.getLength()));
System.out.println(e.getOffset());
System.out.println(e.getLength());
} catch (BadLocationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
@Override
public void removeUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
Document doc = e.getDocument();
try {
label1.setText(doc.getText(0, doc.getLength()));
} catch (BadLocationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
@Override
public void changedUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
Document doc = e.getDocument();
try {
label2.setText(doc.getText(0, doc.getLength()));
} catch (BadLocationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public static void main(String[] args) {
TextFielTest tft = new TextFielTest();
}
}
这里实现文本改变的监听器,其中由三个方法:insertUpdate,removeUpdate分别在文本框中的文字添加和删除时调用
至于changedUpdate,文档中给出的解释是: 给出属性或属性集发生了更改的通知。我是看不懂,具体作用没有试出来。