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

文本组件JTextComponent

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

  • 单行文本框:JTextField.
  • 密码文本框:JPasswordField.
  • 多行文本框:JTextArea.

    在开发中JTextComponent的常用方法如下表所示。

序号方法描述
1public String getText()返回此 文本框中的所有包含的文本。
2public String getSelectedText()返回文本框中选定的内容
3public int getSelectionStart()返回文本框选定文本的起始位置。
4public int getSelectionEnd()返回文本框选定文本的结束位置。
5public void selectAll()选择此文本框中的所有内容
6public void setText(String t)将此文本框文本设置为指定文本。
7public void select(int selectionStart, int selectionEnd)将指定的开始位置和结束位置之间的文本选定。
8public void setEditable(boolean b)设置此文本框是否可编辑

单行文本组件:JTextField

如果要实现一个单行的输入文本,可以使用JTextField组件,JTextField出来可以使用JTextComponent的方法外,还可以使用下表的几个方法。

标题1标题2标题3
1public JTextField()构造一个默认的文本框。
2public JTextField(String text)构造一个有制定文本的文本框。
3public 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.常用方法如下表。

序号方法描述
1public JPasswordField()构造一个新 JPasswordField,使其具有默认文档、为 null 的开始文本字符串和为 0 的列宽度。
2public JPasswordField(String text)构造一个利用指定文本初始化的新 JPasswordField。
3public char getEchoChar()返回要用于回显的字符。
4public void setEchoChar(char c)设置此 JPasswordField 的回显字符。
5char[] 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类,常用方法如下:

序号描述
1public JTextArea()构造文本域,行数和列数默认为0
2public JTextArea(int rows, int columns)构造具有指定行数和列数的新的空 文本域。
3public JTextArea(String text, int rows, int columns)构造具有指定文本、行数和列数的新的文本域。
4public void append(String str)将给定文本追加到文本域的末尾。
5public void replaceRange(String str, int start, int end)用给定的新文本替换指定返回的文本,范围[start,end]。
6public void insert(String str, int pos)将指定文本插入指定位置。
7public 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);
    }
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值