JtextField 学习

JTextField 是一个轻量级组件,它允许编辑单行文本。

通过添加 TextEventTextListener,可以监视 java.awt.TextField 的更改。在基于 JTextComponent 的组件中,通过 DocumentEvent 将更改从模型传播到 DocumentListenersDocumentEvent 给出了更改的位置和更改种类(如果需要)。代码片段可能看起来如下所示:


     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

运行样式:如下图中间部分的框,有固定长度,可以一直输入。

JtextField 学习_第1张图片

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,文档中给出的解释是: 给出属性或属性集发生了更改的通知。我是看不懂,具体作用没有试出来。

 

 

 

 

你可能感兴趣的:(Java基础)