11.3文本输入
允许用户输入和编辑文本的组件,可以使用文本域(JTextFiled),或者可以使用==文本区(JTextArea)==组件输入文本,
文本域只能接收单行文本
文本区能够接受多行文本
JPasswordField也只能接收单行文本的输入,但不会将输入的内容显示出来
这三个类都继承于JTextComponent类。JTextComponen是一个抽象类。
常用方法表:
方法名 | 方法作用 |
---|---|
String getText() | 获得文本组件的文本 |
void setText(String text) | 设置文本组件的文本 |
Booleam isEditable() | 返回是否可以编辑这个文本组建的内容 |
void setEditable | 设置editable特性,决定用户是否可以编辑这个文本内容 |
11.3.1 文本域
把文本域添加到窗口的常用方法就是把它添加到一个面板或者其他的容器中,这与添加按钮完全一样。
var panel=new JPanel();
var textField=new JTextField("Default input",20);
panel.add(textField);
这段代码将添加一个文本域,初始化时在其中放入字符串"Default input"。构造器的第二个参数是这个文本域的宽度。一列就是指当前使用的字体一个字符的宽度,如果希望文本域最多能够输入n个字符就要设置为n列
如果需要在运行时重新设置列数就可以使用setColumns方法
使用setColumns方法改变一个文本框的大小之后,需要调用外围容器的revalidate方法。
textFiele.setColumns(10);
panel.revalidate();
setText方法可以改变文本域中的内容,这个方法是从JTextComponent父类继承来的。
setText("This is my new text);
getText()方法可以获得当前的文本框内容,这个方法是从JTextComponent父类继承来的。
getText();
如果想删除获得的文本前后的空格可以对getText的返回值调用Trim方法
getText().trim();
如果想改变字体需要调用setFont方法
常用方法表:
方法名 | 方法作用 |
---|---|
JTextField(int cols) | 构造一个文本域,参数为指定的列数 |
JTextField(String text,int cols) | 构造一个文本域,第一个参数为初始的字符串,第二个参数为指定的列数 |
int getColumns() | 获取文本域的列数 |
void setColumns() | 设置文本域的使用列数 |
void revalidate() | 重新计算组建的位置和大小 |
void setFont() | 设置这个组件的字体 |
void validate() | 重新计算组件的位置和大小,如果组件时容器,容器中的所有组件也会重新计算位置,大小 |
Font getFont() | 获得这个组件的字体 |
11.3.2 标签和标签组件
标签是容纳文本的组件,他们没有任何的修饰(例如:没有边缘),也不能影响用户的输入,可以利用标签来标识组件要想正确的使用一个标签
应该
- 用正确的文本构造一个JLable组件
- 将它放置在距离需要表示的组件足够近的地方,以便用户看出这个标签所标识的组件
JLabel的构造器可以允许指定的初始文本或者图片,也可以选择内容的排列方式。可以用SwingConstants接口中的常量来指定排列方式
//标签右对齐
var label=new JLabel("This is my label",SwingConstants.RIGHT);
或者
//标签右对齐
var label=new JLabel("This is my label",JLabel.RIGHT);
常用方法:
方法名 | 方法作用 |
---|---|
JLable(String text) | 用文本设置标签 |
JLable(Icon icon) | 用图片设置标签 |
JLable(String text,int align) | 用文本设置标签,第二个参数为排列方式 |
JLable(String text,Icon icon,int align) | 用图片文本设置标签,第三个参数为排列方式 |
String getText() | 获得文本 |
void setText(String text) | 设置文本 |
Icon getIcon() | 获得设置文本的图片 |
void setIcon(Icon icon) | 设置标签的图片 |
11.3.3密码域
密码域是一种特殊的文本域,为了避免有不良企图的人站在一旁看到密码,用户输入的字符不真正显示出来。每个输入的字符都用回显字符表示,典型的回显字符是星号*,Swing提供了JPasswordField类来实现这样的文本域
密码域也是一个体现模型-视图-控制器架构模式强大功能的例子。密码域采用与常规文本相同的模型来存储数据,但是,它的视图却改为显示回显字符,而不是实际的字符。
常用方法:
方法名 | 方法作用 |
---|---|
JPasswordField(String text,int columns) | 构造一个新的密码域 |
void setEchoChar(char echo) | 为密码域设置回显字符,0会设置为默认的回显字符 |
char[] getPassword() | 返回密码域中的包含的文本。为了得到更好的安全性,在使用之后,应该覆写所返回数组的内容 |
11.3.4 文本区
JTextArea组件是接受用户的输入超过一行。
用户可以输入多行文本,并用回车键换行。
每行都以一个 ‘\n’结尾
在JTextArea组件的构造器中可以指定文本区的行数和列数。
textArea=new JTextArea(8,40);//8 lines 40 columns
用户可以用setColums方法改变列数,setRows方法改变行数,这些值指示首选大小——布局管理器可能会对文本区进行缩放
如果文本区的文本过长,超出显示范围,那么剩下的文本,就会被减裁掉。
可以通过开启换行特性来避免减裁过长的行
textArea.setLineWrap(true);//long lines are wrapped
换行只是视觉效果,文档中的文本没有改变,并没有在文本中自动插入‘\n’字符
11.3.5 浮动窗格
文本区没有滚动条。如果需要滚动条,可以将文本区放在滚动窗格中
textArea=new JTextArea(8,40);
var scrollPanel=new JScrollPane(textArea);
现在滚动窗格管理文本区的视图,如果文本超过了文本区可以显示的范围,滚动条就会自动出现
var textArea=new JTextArea();
var scrollPanel=new JScrollPane(textArea);
add(scrollPanel,BordLayout.NORTH);
方法名 | 方法作用 |
---|---|
JTextArea() | 构造一个文本区 |
JTextArea(int rows ,int cols) | 构造一个文本区用行和列 |
JTextArea(String text,int rows,int cols) | 加一个初始化文本到文本区,构造一个文本区用行和列 |
void setColumns(int cols) | 设置文本区应该使用的首选列数 |
void setRows(int rows) | 设置文本区应该使用的首选行数 |
void append(String newText) | 将给定文本最佳到文本区中已有的文本的末尾 |
void setLineWrap(boolean wrap)) | 打开或关闭换行 |
void setWrapStyleWord(boolean word) | 如果为true 超长的单词会在边界换行,如果为false 超长的行会被截断而不考虑单词边界 |
void setTabSize(int c) | 将制表符设置为c列,制表符不会被转化为空格,但可以让文本对齐到下一个制表符处 |
JScrollPane(Component) | 创建一个滚动窗格用来显示指定组建的内容,当组件内容超出显示返回,滚动条会自动出现 |