简述 Java 图形用户界面设计 (Swing) - 学院 - CHINAUI.com 优艾网 - 中国人机界面设计门户网站
您的位置:首页 >> 学院 >> 交互技术 >> 简述 Java 图形用户界面设计 (Swing)
简述 Java 图形用户界面设计 (Swing)
来源:CSDN 作者:边城狂人 发布时间:2008-03-21
 
四. 文本输入框、密码输入框
 
  文本输入框包括两种,单行文本输入框 (JTextField) 和多行文本输入框 (JTextArea)。密码输入框则只有一种 (JPasswordField)。JPasswordField 是 JTextField 的子类,它们的主要区别是 JPasswordField 不会显示出用户输入的东西,而只会显示出程序员设定的一个固定字符,比如 "*" 或者 "#"。
 
  下面的示例图和代码是 JTextField、JPasswordField 和 JTextArea 的示例:
 
/*
 * TestTexts.java
 * @author Fancy
 
*/


import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;

public final class TestTexts extends JFrame {

    
public static void main(String[] args) {
        TestTexts tt 
= new TestTexts();
        tt.setVisible(
true);
    }


    
private JLabel label = new JLabel("Status");

    
private JTextField textField;

    
private JPasswordField pwdField;

    
private JTextArea textArea;

    
public TestTexts() {
        
super("Test Texts");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        getContentPane().setLayout(
new java.awt.FlowLayout());

        textField 
= new JTextField(15);
        
/* 监听文本光标移动事件 */
        textField.addCaretListener(
new CaretListener() {
            
public void caretUpdate(CaretEvent e) {
                
// 如果改变了内容,就可以即时更新 label 显示的内容
                label.setText(textField.getText());
            }

        }
);

        pwdField 
= new JPasswordField(15);
        pwdField.setEchoChar(
"#");

        textArea 
= new JTextArea(515);
        textArea.setLineWrap(
true);

        getContentPane().add(textField);
        getContentPane().add(pwdField);
        getContentPane().add(textArea);
        getContentPane().add(label);

        setSize(
200200);
    }


}
  上例中,我们构造了一个宽度为 15 个字符的单行文本框 (textField = new JTextField(15);),并使用 addCaretListener 方法添加了一个 CaretListener (textField.addCaretListener ...)。CaretListener 监听文本光标的移动事件。当用户使用键盘、鼠标等移动了文本光标在 JTextField 中的位置时触发这个事件。我们需要重载 caretUpdate(CaretEvent e) 对事件进行处理 (public void caretUpdate(CaretEvent e) ...)。这样,我们可以在这里做类似 VB 中 TextBox 的 OnChange 事件中做的事情。
 
  JTextField 有 5 个构造方法,常用其中的四个:
 
  JTextField()
  JTextField(int columns),如上例 textField = new JTextField(15);
  JTextField(String text)
  JTextField(String text, int columns)
 
  其中,参数 text 是单行文本框的初始内容,而 columns 指定了单行文本框的宽度,以字符为单位。JTextField 中的文本内容可以用 getText() 方法获得。也可以用 setText 方法指定 JTextField 中的文本内容。
 
  JPasswordField 是 JTextField 的子类,其构造方法也是类似的。JPasswordField 提供了 setEchoChar(char ch) 方法设置为了隐藏密码而显示的字符,默认为 "*" 字符,上例中则设置为了 "#" 字符 (pwdField.setEchoChar("#");)。与 JTextField 一样,JPasswordField 也用 getText 方法和 setText 获得或者设置文本内容 (当然在用户界面上是隐藏的)。
 
  JTextField 是单行文本框,不能显示多行文本,如果想要显示多行文本,就只好使用多行文本框 JTextArea 了。JTextArea 有六个构造方法,常用的也是四个:
 
  JTextArea()
  JTextArea(int rows, int columns)
  JTextArea(String text)
  JTextArea(String text, int rows, int columns) 
 
  text 为 JTextArea 的初始化文本内容;rows 为 JTextArea 的高度,以行为单位;columns 为 JTextArea 的宽度,以字符为单位。如上例中就构造了一个高 5 行,宽 15 个字符的多行文本框 (textArea = new JTextArea(5, 15);)。
 
  多行文本框默认是不会自动折行的 (不过可以输入回车符换行),我们可以使用 JTextArea 的 setLineWrap 方法设置是否允许自动折行。setLineWrap(true) 是允许自动折行,setLineWrap(false) 则是不允许自动折行。多行文本框会根据用户输入的内容自动扩展大小,不信,自己做个实验——如果不自动折行,那么多行文本框的宽度由最长的一行文字确定的;如果行数据超过了预设的行数,则多行文本框会扩展自身的高度去适应。换句话说,多行文本框不会自动产生滚动条。怎么办?后面讲到滚动窗格 (JScrollPane) 的时候,你就知道了。
 
  多行文本框里文本内容的获得和设置,同样可以使用 getText 和 setText 两个方法来完成。
 
 
相关阅读
推荐文章
热点文章