java核心技术卷 之文本输入

来源:互联网 发布:淘宝店开店流程 编辑:程序博客网 时间:2024/06/06 01:07

        文本域(JTextField)和文本区(JTextArea)组件 用于获取文本输入。文本域只能接收中行文本的输入,而文本区能够接收多行文本的输人。JPassword也只能接收单行文本的输人,但不会将输入的内容显示出来。

       这三个类都继承于JTextComponent类。由于JTextComponent是一个抽象类,所以不能够构造这个类的对象。另外,在Java中常会看到这种情况。在一个文本域和文本区内获取(get)、设置(set)文本的方法实际上都是JTextComponent类中的方法。

String getText()

void setText(String text)

获取或设置文本组件中的文本。

boolean isEditable()

void setEditable( boolean b)

获取或设置editable特件,这个特性决定了是否可以编辑文本组件中的内容。

文本域

        把文木域添加到窗口的常用办法是将它添加到面板或者其他容器中,这与添加按钮完全一样: 

JPanel panel = new JPanel(); 

JTextField textField = new JTextField(“Default input”, 20); 

panel.add(textField); 

        这段代码将添加一个文本域,同时通过传递字符串‚Default input‛进行初始化。构造器的第二个参数设置文本域的宽度,这个示例中,宽度值为20 列。但是,这里所说的列不是一个精确的测量单位。一列就是在当前使用的字体下一个字符的宽度。如果希望文本域最多能够输人n个字符,就应该把宽度设置为n列。实际中,这样做效果并不理想, 应该将最大输入长度再多设丨〜2个字符。列数只是给AWT设定首选(preferred)大小的一个提示。如果布局管理器需要缩放这个文本域,它会调整文本域的大小。在JTextField的构造器中设定的宽度并不是用户能输入的字符个数的上限。用户通常不喜欢滚动文本域,因此应该尽量把文本域设置的宽一些。如果需要作运行时重新设置列数,可以使用lsetColirnins方法。

密码域

         密码域是一种特殊类型的文本域。为了避免有不良企图的人看到密码,用户输人的字符不显示出来。每个输入的字符都用回显字符(echo character)表示,典型的回显字符是星号 (*)。Swing提供了JPasswordField类来实现这样的文本域。 密码域是另一个应用模型-视图-控制器体系模式的例子。密码域采用与常规的文本域相同的模型来存储数据,但是,它的视图却改为显示回显字符,而不是实际的字符。

JPasswordField(String text, int columns)

构造一个新的密码域对象:

void setEchoChar(char echo)

为密码域设贤回显字符。注意:独特的观感可以选择自己的回®字符。0表示重新设靑 为默认的回显字符。

chart ] getPassword()

          返问密码域中的文本。为了安全起见,在使用之后应该覆盖写返回的数组内容(密码并不是以String的形式返回,这是因为字符串在被垃圾回收器回收之前会一直驻留在虚拟机中)。

文本区

        有时,用户的输入超过一行。正像前面提到的,需要使用JTextArea组件来接收这样的输入。在程序中放置一个文本区组件时,用户就可以输入多行文本,并用ENTER键换行。每行都以一个\n结尾。
        在JTextArea组件的构造器中,可以指定文本区的行数和列 数。例如:

textArea = new ]TextArea(8f 40); // 8 lines of 40 columns each

        与文本域一样。出于稳妥的考虑,参数columns应该设置的大 一些另外,用户并不受限于输入指定的行数和列数。当输人 过长时文本会滚动。还可以用setColnmns方法改变列数,用setRows方法改变行数这些数值只是首选太小——布局管理器可能会对文本区迸行缩放。 

         如果文本区的文本超出显示的范,那么剩下的文本就会被剪掉。可以通过开启换行特性来避免裁剪过长的行: 

textArea.setLineWrap(true); // long lines are wrapped 

         换行只是视觉效果;文档中的文本没有改变,在文木中并没有插入‘\n‛字符。

滚动窗格

         在Swing中,文本区没有滚动条。如果需要滚动条,可以将文本区插入到滚动窗格 (scroll pane)中。 

textArea = new JTextArea(8, 40); 

JScrollPane scrollPane = new JScrollPane(textArea); 

         现在滚动窗格管理文本区的视图。如果文本超出了文本可以显示的范围,滚动条就会自动地出现,并且在删除部分文本后,当文本能够显示在文本区范围内吋,滚动条会再次自动地消失。滚动是由滚动窗格内部处理的,编写程序时尤S处理滚动事件。 

         这是一种为任意组件添加滚动功能的通用机制,而不是文本区特有的。也就是说,要想为组件添加滚动条,只需将它们放入一个滚动窗格中即可。

示例代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * Created by IBM on 2017/9/18.
 */
public class TextComponentFrame extends JFrame {
    public static final int TEXTAAREA_ROWS=8;
    public static final int TEXTAAREA_COLUMNS=20;

    public static void main(String[]args){
        TextComponentFrame text=new TextComponentFrame();
        text.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        text.setVisible(true);
    }
    public TextComponentFrame(){
        final JTextField textField=new JTextField();
        final JPasswordField passwordField=new JPasswordField();

        JPanel northPanel=new JPanel();
        northPanel.setLayout(new GridLayout(2,2));
        northPanel.add(new JLabel("User name:",SwingConstants.RIGHT));
        northPanel.add(textField);
        northPanel.add(new JLabel("Password:",SwingConstants.RIGHT));
        northPanel.add(passwordField);

        add(northPanel,BorderLayout.NORTH);

        final JTextArea textArea=new JTextArea(TEXTAAREA_ROWS,TEXTAAREA_COLUMNS);
        JScrollPane scrollPane=new JScrollPane(textArea);
        add(scrollPane,BorderLayout.CENTER);

        JPanel southPanel=new JPanel();
        JButton insertButton=new JButton("Insert");
        southPanel.add(insertButton);
        //按钮单击事件
        insertButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                textArea.append("User name:"+textField.getText()+" Password:"+new String(passwordField.getPassword())+"\n");
            }
        });
        add(southPanel,BorderLayout.SOUTH);
        pack();
    }
}

运行结果:


JTextArea()

• JTextArea( int rows, int cols)

• JTextArea(String text, i nt rows, Int cols)

构造一个新的文本区对象。

• void setCol umns( int cols)

设置文本区应该使用的首选列数

• void setRows(int rows)

设饨文本区应该使的首选行数

• void append(String newText)

将给定的文本追加到文本区中已有文本的尾部

• void setLineWrap(boolean wrap)

打开或关闭换行。

• void setWrapStyleWord(boolean word)

如果word是tme,超长的行会作字边框处换行。 如果为false,超长的行被截断时不考虑字边框。

• void setTabSi ze(int c)

将制表符(tab stop)设置为c列。注意,制表符不会被转化为空格,但可以让文本对齐到下一个制表符处。

Awjjavax.swingJScrollPane 1.2

• JScrol1Pane(Component c )

创逑一个滚动窗格,用来显示指定组件的内容当组件内容超过显示范围时,滚动条会自动地出现。

原创粉丝点击