Java Swing组件:标签与文本

本文详细介绍了JavaSwing库中的标签组件(JLabel)的用法,包括文本和图标的显示以及对齐方式设置。同时还探讨了文本组件(如JTextField、JPasswordField和JTextArea)及其功能,以实例展示了如何使用它们构建登录界面。
摘要由CSDN通过智能技术生成

目录

1. 标签组件

2. 本文组件


1. 标签组件

       标签(JLabel)组件通常用于显示提示性的文本信息或图标。JLabel类的构造方法如下:

  • JLabel():创建一个不显示文本和图标的空标签。
  • JLabel(String text):创建一个显示文本的标签。
  • JLabel(Icon image):创建一个显示图标的标签。
  • JLabel(String text,int horizontalAlignment):创建一个显示文本并且可以设置水平对齐方式的标签。
  • JLabel(String text,Icon image,int horizontalAlignment):创建一个同时显示文本和图标并且可以设置水平对齐方式的标签。

       在上述构造方法中,参数horizontalAlignment表示水平对齐方式,其取值可为JLabel.LEFT、JLabel.RIGHT和JLabel.CENTER,分别表示左对齐、右对齐和居中。默认情况下,只有文本的标签在水平方向上左对齐显示,只有图标的标签在水平方向上居中显示。可以通过setHorizontalAlignment(int alignment)方法改变标签内容的水平对齐方式。对应既有文本又包含图标的标签,默认情况下,文本显示在图标的右侧。可以通过setVerticalAlignment(int textPosition)和setVerticalTextPosition(int textPosition)方法设置文本与图标的相对位置,textPosition的取值可为JLabel.LEFT、JLabel.RIGHT和JLabel.CENTER。

【例1】标签组件的使用。

import java.awt.*;
import javax.swing.*;
public class JLabelDemo extends JFrame{
	JLabel label1=new JLabel("图标:");//只有文本的标签
	Icon icon1=new ImageIcon("./src/img/hit.jpg");
	Icon icon2=new ImageIcon("./src/img/weixin.jpg");
	Icon icon3=new ImageIcon("./src/img/java.jpg");
	JLabel label2=new JLabel(icon1);//只有图标的标签
     //同时有文本和图标的标签
	JLabel label3=new JLabel("微信",icon2,JLabel.LEFT); 
	JLabel label4=new JLabel("Java",icon3,JLabel.CENTER);
	public JLabelDemo() {
		this.setTitle("标签示例");
		this.setSize(300,400);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Container contentPane=this.getContentPane();
		contentPane.setLayout(new GridLayout(4,1,1,1));//网格布局
		//设置文本和图标的相对位置,文本在图标的底部,与图标中间对齐
		label4.setVerticalTextPosition(JLabel.BOTTOM);     
		label4.setHorizontalTextPosition(JLabel.CENTER);   
		contentPane.add(label1);
		contentPane.add(label2);
		contentPane.add(label3);
		contentPane.add(label4);
		this.setVisible(true);
	}
	public static void main(String[] args) {
		JLabelDemo frame=new JLabelDemo();
	}
}

运行上述程序,显示结果如图1所示。从该图可以看出,只有文本的标签默认情况下左对齐,只有图标的标签默认情况下居中,既有文本又有图标的标签默认本文在图标的右侧。第19行和第行20代码的功能表示将文本显示在图标的底部并且居中。

图1. 标签组件的使用示例

2. 本文组件

       文本组件的主要功能是用于显示和输入信息。Swing中的文本组件主要包括:文本框(JTextField)、密码框(JPasswordField)和为文本区(JTextArea),它们都有一个共同的基类JTextComponent文本框和密码框都只能输入和显示单行文本,当按下Enter键时可以触发ActionEvent事件。而在文本区中可以输入和显示多行文本。

1)文本框

       文本框(JTextField)是用来输入和显示单行信息的文本组件。JTextField类的构造方法如下:

  • JTextField():创建一个空的文本框。
  • JTextField(int columns):创建一个指定列数的空文本框。
  • JTextField(String text):创建一个指定初始字符串的文本框。
  • JTextField(String text, int columns):创建一个指定列数和显示指定初始字符串的文本框。

2)密码框

       密码框(JPasswordField)是专门用来输入密码的,输入内容一般不显示原始字符,只显示回显符,默认回显符是“*”。JPasswordField类是JTextField类的子类,因此,其构造方法与JTextField的构造方法类似,这里不再赘述。可以使用setEchoChar(char c)方法重新设置回显字符,调用char[] getPassword()方法返回实际密码。

3)文本区

       文本区(JTextArea)可以输入和显示多行文本信息。JTextArea类的构造方法如下:

  • JTextArea():创建一个空的文本区。
  • JTextArea(int rows,int columns):创建一个指定行数和列数的空文本区。
  • JTextArea(String text):创建一显示指定初始字符串的文本区。
  • JTextArea(String text,int rows,int columns):创建一个指定行数和列数并显示指定初始字符串的文本区。
  • JTextArea(Docment doc):创建一个指定文档的文本区。
  • JTextArea(Docment doc,String text,int rows,int columns):创建一个指定文档,具有指定行数和列数并显示指定初始字符串的文本区。

       JTextArea类中定义了多种对文本区操作的方法,常用方法如下:

  • append(String str):将指定的字符串添加到文本域最后。
  • insert(String str,int pos):将指定的字符串插入到文本域的特定位置。
  • replace(String str,int start,int end):用指定的字符串替换文本域中的部分内容。
  • setRows(int rows):设置文本区的行数。
  • setColumns(int columns):设置文本区的列数。

文本区本身不带滚动条,当文本区显示的内容时可以将其加入到滚动面板(JScrollPane)中。

【例2】利用文本框和密码框等组件编程一个登录界面程序。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class LoginDemo extends JFrame{
	JLabel usernameLabel = new JLabel("账号:");
	JTextField usernameField=new JTextField(20);
	JLabel passwordLabel = new JLabel("密码:");
    JPasswordField passwordField=new JPasswordField(20);
    JButton loginButton = new JButton("登录");
    JButton exitButton = new JButton("退出");
    public LoginDemo() {
        setTitle("登录界面");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(350, 200);
        this.setResizable(false);//禁用最大化
        setLocationRelativeTo(null);//窗口相对于屏幕居中
        Container contentPane=this.getContentPane();
        JPanel panel1 = new JPanel();
        SpringLayout springLayout=new SpringLayout();
        panel1.setLayout(springLayout);//弹性布局
        //账号标签布局
        panel1.add(usernameLabel);
        springLayout.putConstraint(SpringLayout.WEST, usernameLabel, 50, 
SpringLayout.WEST, panel1);
        springLayout.putConstraint(SpringLayout.NORTH, usernameLabel, 30, 
SpringLayout.NORTH, panel1);
        //账号文本框布局
        panel1.add(usernameField);
        springLayout.putConstraint(SpringLayout.WEST, usernameField, 10, 
SpringLayout.EAST, usernameLabel);
        springLayout.putConstraint(SpringLayout.NORTH, usernameField, 30, 
SpringLayout.NORTH, panel1);
        springLayout.putConstraint(SpringLayout.EAST, usernameField, -50, 
SpringLayout.EAST, panel1);
        //密码标签布局
        panel1.add(passwordLabel);
        springLayout.putConstraint(SpringLayout.WEST, passwordLabel, 50, 
SpringLayout.WEST, panel1);
        springLayout.putConstraint(SpringLayout.NORTH, passwordLabel, 30, 
SpringLayout.SOUTH, usernameLabel);
        //密码框布局
        panel1.add(passwordField);
        springLayout.putConstraint(SpringLayout.WEST, passwordField, 10, 
SpringLayout.EAST, passwordLabel);
        springLayout.putConstraint(SpringLayout.NORTH, passwordField, 30, 
SpringLayout.SOUTH, usernameField);
        springLayout.putConstraint(SpringLayout.EAST, passwordField, -50, 
SpringLayout.EAST, panel1);
        //将面板panel1放到窗口的中部
        contentPane.add(panel1,BorderLayout.CENTER);
        
        JPanel panel2 = new JPanel();
        panel2.add(loginButton);
        panel2.add(exitButton);
        //将面板panel2放到窗口的下部
        contentPane.add(panel2,BorderLayout.SOUTH);
        //注册事件监听器(匿名类)
        loginButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String username = usernameField.getText();
                String password = new String(passwordField.getPassword());
                if (username.equals("admin") && password.equals("password")) {
                    JOptionPane.showMessageDialog(LoginDemo.this, "登录成功!");
                } else {
                    JOptionPane.showMessageDialog(LoginDemo.this, "登录失败!");
                }
            }
        });
        //注册事件监听器(匿名类)
        exitButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        setVisible(true);
    }
	public static void main(String[] args) {
		new LoginDemo();
	}
}

       运行上述程序,显示结果如图2(a)所示。当用户输入账号 “admin”和密码“passord”,点击登录按钮,则弹出“登录成功!”的消息框,如图2(b)所示。如果用户输入的账号不是“admin”或者密码不是“passord”,点击登录按钮。则会弹出如图2(c)所示的消息框。当用户点击退出按钮,则会结束应用程序的运行。

                                                                          (a)

​​​​​(b)

​​​​​​​(c)

     图2. 登录界面示例         

  • 30
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值