程序中使用文本框,以便给用户输入数据,在Swing中也提供了同样的文本框组件。在Swing中文本框分为以下几类。
多行文本框:JTextArea.
在开发中JTextComponent的常用方法如下表所示。
序号 | 方法 | 描述 |
---|---|---|
1 | public String getText() | 返回此 文本框中的所有包含的文本。 |
2 | public String getSelectedText() | 返回文本框中选定的内容 |
3 | public int getSelectionStart() | 返回文本框选定文本的起始位置。 |
4 | public int getSelectionEnd() | 返回文本框选定文本的结束位置。 |
5 | public void selectAll() | 选择此文本框中的所有内容 |
6 | public void setText(String t) | 将此文本框文本设置为指定文本。 |
7 | public void select(int selectionStart, int selectionEnd) | 将指定的开始位置和结束位置之间的文本选定。 |
8 | public void setEditable(boolean b) | 设置此文本框是否可编辑 |
如果要实现一个单行的输入文本,可以使用JTextField组件,JTextField出来可以使用JTextComponent的方法外,还可以使用下表的几个方法。
标题1 | 标题2 | 标题3 |
---|---|---|
1 | public JTextField() | 构造一个默认的文本框。 |
2 | public JTextField(String text) | 构造一个有制定文本的文本框。 |
3 | public void setColumns(int columns) | 设置此 TextField 中的列数,然后验证布局。 |
实例:使用JTextField定义普通文本框
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JLabel;
public class JTextDemo01
{
public static void main(String args[])
{
JFrame frame = new JFrame("测试单行文本组件JTextField");
//文本组件长度30
JTextField name = new JTextField(30);
//带默认内容的文本组件,长度10
JTextField noed = new JTextField("默认文本", 10);
JLabel nameLab = new JLabel("输入用户姓名:");
JLabel noedLab = new JLabel("不可编辑文本:");
//设置组件的长度
name.setColumns(30);
noed.setColumns(10);
//设置默认文本组件不可编辑
noed.setEnabled(false);
//使用网格布局
frame.setLayout(new GridLayout(2, 2));
frame.add(nameLab);
frame.add(name);
frame.add(noedLab);
frame.add(noed);
frame.setSize(400, 100);
frame.setLocation(300, 200);
frame.setVisible(true);
}
}
运行效果:
以上程序使用网格布局GridLayout的排版样式,第一个文本框是可以编辑的,第二个文本框是不可编辑的。虽然在上面使用
name.setColumns(30);
noed.setColumns(10);
设置了组件的长度,但是在显示上两个文本框的长度都是一样的,只是因为使用了GridLayout,GirdLayout(网格布局)在使用时会忽略这些组件的长度,从而让网格中的每一个格子都具有相同的大小。如果想设置组件的大小,可以取消布局管理器,使用绝对定位的方式。
实例:使用绝对定位显示单行文本组件
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JLabel;
public class JTextDemo02
{
public static void main(String args[])
{
JFrame frame = new JFrame("使用绝对定位布局JTextField");
JTextField name = new JTextField(30);
JTextField noed = new JTextField("默认文本", 10);
JLabel nameLab = new JLabel("输入用户姓名:");
JLabel noedLab = new JLabel("不可编辑文本:");
name.setColumns(30);
noed.setColumns(10);
noed.setEnabled(false);
//设置名字标签的坐标和宽度高度
nameLab.setBounds(10, 10, 100, 20);
noedLab.setBounds(10, 40, 100, 20);
name.setBounds(110, 10, 80, 20);
noed.setBounds(110, 40, 50, 20);
//不适用布局管理器,设置为null
frame.setLayout(null);
//添加组件
frame.add(nameLab);
frame.add(name);
frame.add(noedLab);
frame.add(noed);
frame.setSize(300, 100);
frame.setLocation(300, 200);
frame.setVisible(true);
}
}
运行效果:
使用绝对定位的方法对组件进行显示设置,这样组件的位置,大小就可根据自己的需要自由定义。
JTextField是使用明文方式进行数据显示的,如果现在需要将回显的内容设置成其他字符,则可以使用JPasswordFieldl.常用方法如下表。
序号 | 方法 | 描述 |
---|---|---|
1 | public JPasswordField() | 构造一个新 JPasswordField,使其具有默认文档、为 null 的开始文本字符串和为 0 的列宽度。 |
2 | public JPasswordField(String text) | 构造一个利用指定文本初始化的新 JPasswordField。 |
3 | public char getEchoChar() | 返回要用于回显的字符。 |
4 | public void setEchoChar(char c) | 设置此 JPasswordField 的回显字符。 |
5 | char[] getPassword() | 返回此文本框中所包含的文本。 |
实例:使用密码框
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JLabel;
public class JPasswordDemo01
{
public static void main(String args[])
{
JFrame frame = new JFrame("使用密码框");
JPasswordField jpf1 = new JPasswordField();
JPasswordField jpf2 = new JPasswordField();
//密码框二设置回显为"#"
jpf2.setEchoChar('#'); // 设置回显
JLabel lab1 = new JLabel("默认的回显:");
JLabel lab2 = new JLabel("回显设置“#”:");
lab1.setBounds(10, 10, 100, 20);
lab2.setBounds(10, 40, 100, 20);
jpf1.setBounds(110, 10, 80, 20);
jpf2.setBounds(110, 40, 50, 20);
frame.setLayout(null);
frame.add(lab1);
frame.add(jpf1);
frame.add(lab2);
frame.add(jpf2);
frame.setSize(300, 100);
frame.setLocation(300, 200);
frame.setVisible(true);
}
};
运行结果:
在上面的例子中,第一个密码框使用的是默认的回显字符,第二个密码框使用"#"
作为回显字符。
如果要输入多行文本,则可以使用JTextArea实现多行文本的输入。JTextArea拓展了JTextComponent类,常用方法如下:
序号 | 描述 | |
---|---|---|
1 | public JTextArea() | 构造文本域,行数和列数默认为0 |
2 | public JTextArea(int rows, int columns) | 构造具有指定行数和列数的新的空 文本域。 |
3 | public JTextArea(String text, int rows, int columns) | 构造具有指定文本、行数和列数的新的文本域。 |
4 | public void append(String str) | 将给定文本追加到文本域的末尾。 |
5 | public void replaceRange(String str, int start, int end) | 用给定的新文本替换指定返回的文本,范围[start,end]。 |
6 | public void insert(String str, int pos) | 将指定文本插入指定位置。 |
7 | public void setLineWrap(boolean wrap) | 设置文本区的换行策略。 |
实例:使用文本域JTextArea
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JLabel;
public class JTextAreaDemo01
{
public static void main(String args[])
{
JFrame frame = new JFrame("使用文本域");
//设置文本域的行数,列数
JTextArea jtextarearea = new JTextArea(3, 20); // 设置大小
JLabel lab = new JLabel("多行文本域:");
//设置标签大小
lab.setBounds(10, 10, 120, 20);
//设置文本域的大小
jtextarearea.setBounds(100, 10, 200, 140);
//取消布局管理器,使用绝对定位
frame.setLayout(null); // 取消布局管理器
frame.add(lab);
frame.add(jtextarearea);
frame.setSize(400, 200);
frame.setLocation(300, 200);
frame.setVisible(true);
}
}
运行结果:
上面的例子中,只是简单的构建了一个文本域,但是如果一个文本域区域设置过大,则应该使用滚动条显示,此时就需要将文本域设置到带滚动条的面包中,也就是使用JScrollPane即可。
实例:文本域中加入滚动条
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JLabel;
public class JTextAreaDemo02
{
public static void main(String args[])
{
JFrame frame = new JFrame("文本域中加入滚动条");
JTextArea jtextarea = new JTextArea(3, 10); // 设置大小
JLabel lab = new JLabel("多行文本域:");
//在有带滚动条的面板中设置文本域,并设置垂直滚动条,垂直滚动条。
JScrollPane scr = new JScrollPane(jtextarea,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
frame.setLayout(new GridLayout(1, 2));
frame.add(lab);
frame.add(scr);
frame.setSize(400, 300);
frame.setLocation(300, 200);
frame.setVisible(true);
}
}