目录
01 文本组件介绍
02 实例代码
01 文本组件介绍
文本组件可用于显示信息和提供用户输入功能,在Swing中提供了文本域(JTextField)、口令输入域(JPasswordField)、文本区(JTextArea)等多个文本组件,这些文本组件都有一个共同的父类—JTextComponent,在JTextComponent中定义了文本组件所共有的一些方法,主要有以下几种。
•String getSelectedText( ):从文本组件中提取被选中的文本内容。
•String getText( ):从文本组件中提取所有文本内容。
•String getText(intoffs,intlen):从文本组件中提取指定范围的文本内容。
•void select(intselectionStart,intselectionEnd):在文本组件中选中指定的起始和结束位置之间的文本内容。
•void selectAll( ):在文本组件中选中所有文本内容。
•void setEditable(boolean b):设置为可编辑或不可编辑状态。
•void setText(String t):设置文本组件中的文本内容。
•void setDocument(Document doc):设置文本组件的文档。
•void copy( ):复制选中的文本到剪贴板。
•void cut( ):剪切选中的文本到剪贴板。
•void paste( ):将剪贴板的内容粘贴到当前位置。
JComponent类中的常用方法如下。
•public booleanrequestFocusInWindow( ):请求当前组件获得输入焦点。
文本域
文本域是一个单行的文本输入框,可用于输入少量文本,常用的构造方法如下。
•JTextField( ):构造一个空文本域。
•JTextField(int columns):构造一个具有指定列数的空文本域,int型参数columns指定文本域的列数。
•JTextField(String text):构造一个显示指定初始字符串的文本域,String 型参数text指定要显示的初始字符串。
•JTextField(String text,int columns):构造一个具有指定列数并显示指定初始字符串的文本域String 型参数text指定要显示的初始字符串,int型参数columns指定文本域的列数。
文本域还有以下常用方法。
•void addActionListener(ActionListener l):添加指定的操作侦听器,接收操作事件。
•void removeActionListener(ActionListener l):移除指定的操作侦听器,不再接收操作事件。
•void setFont(Font f):设置当前字体。
•void setHorizontalAlignment(int alignment):设置文本的水平对齐方式。有效值包括JTextField.LEFT、JTextField.CENTER、JTextField.RIGHT、JTextField.LEADING和JTextField.TRAILING。
•intgetColumns( ):返回文本域的列数。
例如:
JTextFieldtf=new JTextField(“Single Line",30);
这条命令创建一个列数为30、初始字符串为“Single Line”的文本域。在构造方法中所指定的列数,是一个希望的数值,由于组件的大小和位置通常是由布局管理器决定的,因此,指定的这些数据很有可能被忽略。
可以用SetEditable(boolean)方法将文本域设定为可编辑的或不可编辑的状态。
文本区
文本区是一个多行多列的文本输入框,常用的构造方法如下。
•JTextArea( ):构造一个空文本区。
•JTextArea(String text):构造一个显示指定初始字符串的文本区,String 型参数text指定要显示的初始字符串。
•JTextArea(introws,int columns):构造一个具有指定行数和列数的空文本区,int型参数rows和columns分别指定文本区的行数和列数。
•JTextArea(String text,introws,int columns):构造一个具有指定行数和列数并显示指定初始字符串的文本区,String 型参数text指定要显示的初始字符串,int型参数rows和columns指定文本区的行数和列数。
例如,语句:
JTextArea ta=new JTextArea(“Initial text”,4,30);
创建一个4行、30列、显示初始字符串“Initial text”的文本区。
与文本域类似,构造方法中指定的行数和列数只是希望的数值,文本区的大小仍然是由布局管理器决定的。
文本区本身不带滚动条,由于文本区内显示的内容通常比较多,因此一般将其放入滚动窗格JScrollPane中。例如:
JTextArea ta=new JTextArea( );
JScrollPanejsp=new JScrollPane(ta);
//给文本区添加滚动条
除了前面提到的JTextComponent类中的常用方法外,在JTextArea类中还定义了多种对文本区进行操作的方法,分别如下。
•void append(String str):将指定文本str追加到文本区。
•void insert(String str,intpos):将指定文本str插入到文本区的特定位置pos处。
•void replaceRange(String str,intstart,int end):用指定文本str替换文本区中从起始位置start到结尾位置end的内容。可以为文本区注册普通的事件侦听程序,但是由于文本区中可输入的文本是多行的,用户按〈Enter〉键的结果只是向缓冲区输入一个字符,并不能表示输入的结束。因此,当需要识别用户“输入完成”时,通常要在文本区旁放置一个“Apply”或“Commit”之类的按钮。
02 实例代码
实例代码如下
package com.java.pc;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.Border;
public class Subject {
JFrame frame=new JFrame("JTextArea Demo");
JTextArea ta1,ta2;
JButton copy,clear;
public static void main(String args[])
{
Subject s=new Subject();
s.go();
}
public void go()
{
ta1=new JTextArea(3,15);
ta1.setSelectedTextColor(Color.red);
ta2=new JTextArea(7,20);
ta2.setEditable(false);
JScrollPane jsp1=new JScrollPane(ta1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
JScrollPane jsp2=new JScrollPane(ta2,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
copy=new JButton(" Copy ");
copy.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
if(ta1.getSelectedText()!=null)
{
ta2.append(ta1.getSelectedText()+"\n");
}else{
ta2.append("\n"+ta1.getText()+"\n");
}
}
});
clear=new JButton("Clear");
clear.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
ta2.setText("");
}
});
JPanel panel1=new JPanel();
JPanel panel2=new JPanel();
Border etchedBase=BorderFactory.createEtchedBorder();
Border ethed1=BorderFactory.createTitledBorder(etchedBase,"输入区");
Border ethed2=BorderFactory.createTitledBorder(etchedBase, "复制区");
panel1.setBorder(ethed1);
panel2.setBorder(ethed2);
panel1.add(jsp1);
panel1.add(copy);
panel2.add(jsp2);
panel2.add(clear);
Container cp=frame.getContentPane();
cp.add(panel1,BorderLayout.CENTER);
cp.add(panel2,BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
最终实现效果如下