首页 > 编程语言 >咱们一起学 Java(107)

咱们一起学 Java(107)

时间:2025-01-02 20:57:31浏览次数:3  
标签:滚动 frame new 咱们 密码 import Java 文本 107

咱们一起学 Java(107)

在之前的学习中,我们已经掌握了文本域和标签组件在Java图形程序中的使用,能够构建具有基本文本输入和标识功能的界面。今天,我们将继续深入学习文本输入相关的组件,包括密码域(JPasswordField)、文本区(JTextArea)以及滚动窗格(JScrollPane)。这些组件在处理密码输入、多行文本编辑和提供滚动功能方面发挥着重要作用,将进一步丰富我们创建用户交互界面的能力,例如构建用户注册登录界面、文本编辑器等应用场景。希望通过这篇博客,大家能够熟练运用这些组件,提升图形界面的功能性和用户体验。

一、密码域(JPasswordField)

1. 密码域的功能与特点

密码域是一种特殊的文本域,专门用于处理密码输入。其主要特点是在用户输入密码时,不显示实际字符,而是用回显字符(通常为星号*)代替,以保护密码的安全性,防止他人窥探。这是模型 - 视图 - 控制器体系模式的一个应用实例,它使用与常规文本域相同的模型来存储数据,但视图部分进行了定制,将实际字符隐藏,显示回显字符。例如,在一个登录界面中,用户输入密码时,密码域会将输入的字符显示为星号,确保密码的保密性。

2. 密码域的构造与回显字符设置

创建密码域时,可以在构造器中指定初始文本和列数,类似于文本域的构造方式。例如,创建一个宽度为20列的密码域:

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
public class JPasswordFieldExample {
 public static void main(String[] args) {
 JFrame frame = new JFrame("JPasswordField Example");
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 JPanel panel = new JPanel();
 JPasswordField passwordField = new JPasswordField("", 20);
 panel.add(passwordField);
 frame.add(panel);
 frame.pack();
 frame.setVisible(true);
 }
}

可以使用setEchoChar方法设置密码域的回显字符。例如,如果想要将回显字符设置为井号#:

passwordField.setEchoChar('#');

需要注意的是,不同的观感可能会选择自己的回显字符,并且可以使用0来重置为默认的回显字符。

3. 获取密码域中的文本

获取密码域中的文本时,需要注意安全性。密码并不是以String的形式返回,因为String在被垃圾回收器回收之前会一直驻留在虚拟机中,可能存在安全风险。JPasswordField提供了getPassword方法,该方法返回一个字符数组。在使用完密码后,应该及时覆写这个数组的内容,以确保密码信息不会被意外获取。以下是一个简单的示例,演示如何获取密码域中的密码(这里只是简单打印密码数组内容,实际应用中应进行安全的密码验证等操作):

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class PasswordFieldGetPasswordExample {
 public static void main(String[] args) {
 JFrame frame = new JFrame("Password Field Get Password Example");
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 JPanel panel = new JPanel();
 JPasswordField passwordField = new JPasswordField("", 20);
 JButton submitButton = new JButton("提交");
 submitButton.addActionListener(new ActionListener() {
 @Override
 public void actionPerformed(ActionEvent e) {
 char[] password = passwordField.getPassword();
 System.out.println("密码: " + new String(password));
 // 使用完密码后,及时覆写密码数组内容
 for (int i = 0; i < password.length; i++) {
 password[i] = '\0';
 }
 }
 });
 panel.add(passwordField);
 panel.add(submitButton);
 frame.add(panel);
 frame.pack();
 frame.setVisible(true);
 }
}

在这个示例中,当用户点击提交按钮时,获取密码域中的密码并打印出来,然后立即将密码数组中的内容覆写为空字符,以提高安全性。

二、文本区(JTextArea)

1. 文本区的用途与基本用法

文本区用于接收多行文本输入,适用于用户需要输入较长文本内容的场景,如撰写邮件、编辑文档等。在构造文本区时,可以指定行数和列数,类似于文本域的列数设置,这些参数用于提示布局管理器文本区的首选大小,但用户输入不受限于此。例如,创建一个8行40列的文本区:

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class JTextAreaExample {
 public static void main(String[] args) {
 JFrame frame = new JFrame("JTextArea Example");
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 JPanel panel = new JPanel();
 JTextArea textArea = new JTextArea(8, 40);
 panel.add(textArea);
 frame.add(panel);
 frame.pack();
 frame.setVisible(true);
 }
}

2. 文本区的换行与滚动

当文本区中的文本超出显示范围时,如果不进行处理,文本会被剪裁掉。为了避免这种情况,可以开启换行特性,使用setLineWrap方法将其设置为true。需要注意的是,换行只是一种视觉效果,文档中的文本实际上并没有插入换行符“\n”。例如:

textArea.setLineWrap(true);

此外,文本区本身没有滚动条。如果需要为文本区添加滚动功能,可以将其插入到滚动窗格中,这将在后续介绍。

3. 文本区行数和列数的动态调整

与文本域类似,可以使用setColumns方法改变文本区的列数,使用setRows方法改变行数。这些操作会影响布局管理器对文本区大小的计算和布局。例如,以下代码在按钮点击时将文本区的列数增加到50:

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class JTextAreaResizeExample {
 public static void main(String[] args) {
 JFrame frame = new JFrame("JTextArea Resize Example");
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 JPanel panel = new JPanel();
 JTextArea textArea = new JTextArea(8, 40);
 JButton resizeButton = new JButton("调整列数");
 resizeButton.addActionListener(new ActionListener() {
 @Override
 public void actionPerformed(ActionEvent e) {
 textArea.setColumns(50);
 panel.revalidate();
 }
 });
 panel.add(textArea);
 panel.add(resizeButton);
 frame.add(panel);
 frame.pack();
 frame.setVisible(true);
 }
}

在这个示例中,点击“调整列数”按钮后,文本区的列数会增加,界面会自动重新布局。

三、滚动窗格(JScrollPane)

1. 滚动窗格的作用与基本原理

滚动窗格用于为组件提供滚动功能,在Swing中,文本区通常需要与滚动窗格结合使用,以实现当文本内容超出文本区显示范围时能够滚动查看。其原理是滚动窗格管理文本区的视图,当文本超出可显示范围时,自动显示滚动条;当文本内容减少到可以在文本区内完全显示时,滚动条会自动消失。滚动窗格内部处理滚动事件,我们在编写程序时无需手动处理这些复杂的滚动逻辑。例如,在一个文本编辑器中,当用户输入大量文本时,滚动窗格使得用户可以方便地浏览和编辑文本。

2. 将组件添加到滚动窗格

将组件添加到滚动窗格非常简单,只需在创建滚动窗格时将需要滚动功能的组件作为参数传递给构造器即可。例如,将一个文本区添加到滚动窗格中:

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class JScrollPaneExample {
 public static void main(String[] args) {
 JFrame frame = new JFrame("JScrollPane Example");
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 JPanel panel = new JPanel();
 JTextArea textArea = new JTextArea(8, 40);
 JScrollPane scrollPane = new JScrollPane(textArea);
 panel.add(scrollPane);
 frame.add(panel);
 frame.pack();
 frame.setVisible(true);
 }
}

在这个示例中,文本区被添加到滚动窗格中,当文本内容超出文本区大小时,滚动条会自动出现。

3. 滚动窗格的通用性

滚动窗格不仅可以用于文本区,还可以为任意组件添加滚动功能。这使得我们在处理其他可能需要滚动显示的组件时,能够方便地提供滚动支持。例如,如果有一个包含大量图片的面板,当图片数量超过面板显示范围时,可以将面板添加到滚动窗格中,实现图片的滚动浏览。

四、总结与展望

今天我们深入学习了Java图形程序中的密码域、文本区和滚动窗格。密码域为密码输入提供了安全的方式,文本区满足了多行文本输入和编辑的需求,滚动窗格则为需要滚动显示的组件提供了便捷的解决方案。通过合理运用这些组件,我们能够创建出更加功能丰富、用户体验良好的图形界面,如登录注册界面、文本编辑器、信息展示窗口等。在后续的学习中,我们将继续探索Swing中的其他组件,如单选按钮、复选框、菜单等,进一步拓展我们在图形编程领域的能力,打造出更加完整、实用的图形应用程序。
希望这篇博客对大家在Java图形编程的学习中有所帮助。如果您觉得文章有用,请点赞、评论并关注我的博客。您的支持是我继续分享知识的动力,让我们一起在Java编程的世界里不断探索和进步。如果您在学习过程中有任何疑问或者建议,欢迎在评论区留言,我们一起讨论。感谢您的阅读!

标签:滚动,frame,new,咱们,密码,import,Java,文本,107
From: https://blog.csdn.net/wj_rdk/article/details/144894862

相关文章

  • docker 镜像上传下载,及构建java项目镜像心得
    docker在服务部署中是比较方便,并且在部署过程中出现问题的几率较低。本文对基础的docker项目部署做简单介绍1、安装docker和docker-compose,网上都有自行搜索2、拉取官方镜像①、拉官方镜像需要有镜像服务器,没有镜像服务器会报错,好用的镜像服务器都是收费的,不收费的大部分用不......
  • 01java反序列化基础
    java反射的相关操作一些重要的方法获取类的⽅法:forName实例化类对象的⽅法:newInstance获取函数的⽅法:getMethod执⾏函数的⽅法:invoke//eg.反射获取任意类的任意方法并执行importjava.lang.reflect.Method;publicclassReflectionExample{publics......
  • java8--类PrintWriter--文件内容写入--println&print&printf
    PrintWriterout=null;try{out=newPrintWriter("./src/test/myfile.txt","UTF-8");}catch(FileNotFoundExceptionfileNotFoundException){fileNotFoundException.printStackTrace();}catch(UnsupportedEncodingExceptio......
  • Java-数据结构-包装类与泛型
    一、包装类Java的包装类指的是将基本数据类型(如int、float、boolean等)封装成对象的类。Java中的8个基本数据类型(byte、short、int、long、float、double、char、boolean)都有对应的包装类。①基本数据类型对应的包装类基本数据类型包装类byteByteshortShortintIntegerlongLo......
  • java包名命名规范
    Java的包名由小写单词组成,包的路径符合所开发的系统模块的定义,以便通过包名可得知其属于哪个模块,从而方便到对应包里找相应的实现类.常规包名为了保障每个JavaPackage命名的唯一性,在Java编程规范中要求开发人员在自己定义的包名前加上唯一的前缀.由于互联网上的域名称是不会......
  • java.lang.NullPointerException
    1、字符串变量未初始化2、接口类型的对象没有用具体的类初始化,比如:Mapmap//会报错Mapmap=newMap();//则不会报错了3、当一个对象的值为空时,你没有判断为空的情况。4、字符串与文字的比较,文字可以是一个字符串或Enum的元素,如下会出现异常Stringstr=null;if(str.equals(“T......
  • JavaScript代码安全性提升:选择和使用JS混淆工具的指南
    https://toolin.cn/jsfuck https://maimai.cn/article/detail?fid=1827257627&efid=382Pa05uQ_i7jAl6rmq5tg 在Web开发中,JavaScript是一种常用的脚本语言,然而,由于其代码容易被他人轻易获取和修改,为了保护JavaScript代码的安全性和版权,我们需要使用JS混淆工具。本文将介绍什......
  • Java框架 —— SpringBoot(二)
    整合JDBC导入依赖:spring-boot-starter-jdbc<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency>导入依赖:mysql-connector-j<dependency><g......
  • [密码管理/信息安全] KeePass Java 客户端 : KeePassJava2
    序:续《KeePass:密码管理工具》[密码管理/信息安全]密码管理工具:KeePassvsLastPassvs1Password-博客园/千千寰宇【推荐】概述KeePassJava客户端(KeePassJava2)KeePassJava2是一个用Java编写的API,用于操作KeePass密码数据库KeePassJava2是一个高度灵活且......
  • Java学习笔记06-多态polymorphism
    一、多态1、含义:多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态多态的具体代码体现:packageorg.example.polymorphism1;publicclassAnimal{publicStringname="动物";publicvoidrun(){System.out.println("动物跑");}......