8.3 文本输入
在java中,能够用于文本输入的组件包括JTextField(文本框)、JTextArea(文本区)以及 JPasswordField(密码框),JLabel(标签)不支持文本输入,但可以容纳文本。
8.3.1 JTextFileld 文本框
JTextField文本框是一个允许编辑单行文本的swing组件,JTextField提供了多个构造方法用于创建JTextField对象。具体见下表8-3。
表8-3 JTextField构造方法
|
构造方法 |
说明 |
|
public JTextField() |
构造一个新的 TextField。初始字符串为 null,列数为 0 |
|
public JTextField(String text) |
构造一个用指定文本初始化的新TextField。列数为 0 |
|
public JTextField(int columns) |
构造一个具有指定列数的新的空TextField。初始字符串为 null。 |
public JTextField (String text,int columns) |
构造一个用指定文本和列初始化的新 TextField。text:文本值,columns:列数 |
JTextField有两个重要的方法setText(String t)和getText()分别用于设置文本框的显示文本和获取当前文本框的文本。不过这两个方法都不是JTextField本身提供的方法,而是其父类JTextComponent所提供的。
JTextField类可引发ActionEvent事件,当用户在文本框中按下回车键时触发。
8.3.2 JTextArea 文本区
JTextArea文本区是一个允许编辑多行文本的swing组件,JTextArea提供了多个构造方法用于创建JTextArea对象。具体见下表8-4。
表8-4 JTextArea构造方法
|
构造方法 |
说明 |
|
JTextArea() |
构造新的 TextArea。初始字符串为 null,行/列设置为 0。 |
|
JTextArea(String text) |
构造显示指定文本的新的 TextArea。行/列设置为 0 |
|
JTextArea(int rows, |
构造具有指定行数和列数的新的空 TextArea。初始字符串为 null |
JTextArea(String text, int rows,int columns) |
构造具有指定文本、行数和列数的新的 TextArea。text:文本值,rows:行数,columns:列数 |
JTextArea类可引发ActionEvent事件,当用户在文本区中按下回车键时触发。
8.3.3 JPasswordField密码框
在AWT组件中,并没有单独的密码框组件,而是通过TextField的一个setEchoChar()方法来得到密码框,但在Swing中则单独通过一个类JPasswordField来表示。密码框是文本框JTextField组件的简单扩展。因此,其构造方法与JTextField相类似,这里不再介绍。JPasswordField类中有几个重要方法,如下:
表8-5 JPasswordField类常用构造方法
|
成员方法 |
说明 |
|
public char[] getPassword() |
获得密码的字符数组表示,用来替代getText()方法 |
|
public void setEchoChar(char c) |
设置此 JPasswordField 的回显字符 |
|
public char getEchoChar() |
返回要用于回显的字符 |
8.3.4 JLabel标签
JLabel是一个静态组件,该组件可以显示一行静态文本,一般只是一个说明性的文字,而不接受用户的输入,也无事件响应。
JLabel提供了如下方法用于构建JLabel对象
表8-6 JLabel构造方法
|
构造方法 |
说明 |
|
JLabel() |
创建无图像并且其标题为空字符串的 JLabel类对象 |
|
JLabel(Icon image) |
创建具有指定图像的 JLabel类对象 |
public JLabel(Icon image, int horizontalAlignment) |
创建具有指定图像和水平对齐方式的 JLabe类对象 |
JLabel(String text) |
创建具有指定文本的 JLabel类对象 |
JLabel(String text,Icon icon, int horizontalAlignment) |
创建具有指定文本、图像和水平对齐方式的 JLabel类对象 |
JLabel(String text, int horizontalAlignment) |
创建具有指定文本和水平对齐方式的 JLabel类对象 |
构造方法中各参数意义
Image:显示在JLabel上的图标。
horizontalAlignment:JLabel上文字的对齐方式,其值为int枚举型,值包括SwingConstants.LEFT、SwingConstants.CENTER、SwingConstants.RIGHT、SwingConstants.LEADING 和 SwingConstants.TRAILING。
text:显示在JLabel上的文字。
以下的例8-4演示了本节中所介绍的各个组件的用法,界面可提供用户输入用户名和密码,按下回车后在JTextArea显示区显示用户输入的用户名和密码信息,不允许用户名或密码为空。
[例8-4]
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class TextInputTest extends JFrame{
private JTextField userName = new JTextField(10);
private JTextArea ta = new JTextArea(4,10);
private JPasswordField password = new JPasswordField(10);
private JLabel label1 = new JLabel("用户名");
private JLabel label2 = new JLabel("密 码");
public TextInputTest(String title){
super(title);
password.setEchoChar('*');//设置回显字符
Container contentPane = this.getContentPane();
JPanel panelNorth = new JPanel();
JPanel panelCenter = new JPanel();
panelNorth.add(label1);
panelNorth.add(userName);
panelCenter.add(label2);
panelCenter.add(password);
contentPane.add(panelNorth,BorderLayout.NORTH);
contentPane.add(panelCenter,BorderLayout.CENTER);
contentPane.add(ta,BorderLayout.SOUTH);
pack();
//监听userName和password控件
userName.addActionListener(new MyActionListener());
password.addActionListener(new MyActionListener());
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} [NextPage]
private class MyActionListener implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
String name = userName.getText();
char[] pwd = password.getPassword();
if(name.length()==0){
ta.setText("请输入用户名");
return;
}
if(pwd.length==0){
ta.setText("请输入密码");
return;
}
//new String(pwd)将字符数组pwd转换为字符串
ta.setText("用户名:"+name+"\n密码:"+new String(pwd));
}
}
}
public class Test8_4 {
public static void main(String[] args) {
new TextInputTest("文本输入控件测试");
}
}
程序运行结果如图8-5所示

图8-5 例8-4不同输入情况下的运行结果
例8-4中用到了容器的嵌套,JFrame的North和Center添加的都是JLabel对象,而两个JLabel对象里又添加了其他组件,在程序中没有使用setLayout设置JFrame和JLabel的布局策略,原因是两者的默认布局策略正好可以满足我们的布局。
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15080520号-20 珠峰网 版权所有 All Rights Reserved
|