Java GUI编程9---文本组件JTextComponent

文本组件JTextComponent

程序中使用文本框,以便给用户输入数据,在Swing中也提供了同样的文本框组件。在Swing中文本框分为以下几类。

  • 单行文本框:JTextField.
  • 密码文本框:JPasswordField.
  • 多行文本框: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组件,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);
    }
}

运行效果:
使用绝对定位方式布局文本框
使用绝对定位的方法对组件进行显示设置,这样组件的位置,大小就可根据自己的需要自由定义。

密码框 :JPasswordField

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实现多行文本的输入。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);
    }
}

运行结果:
文本域设置滚动条:放到带滚动条的面板中

猜你喜欢

转载自blog.csdn.net/qq_21808961/article/details/80709121