今天在写程序时,在某个方法中动态设置JLabel的setText()时,遇到了问题!
点击按钮使JLabel的text显示为"连接服务器",当执行完服务器程序时,若登录错误,显示“失败”原程序:
public void jButton1_actionPerformed(ActionEvent e) {
???? jLabel4.setText("连接服务器……");
???? String name,password;
???? name=jTextField1.getText();
???? password=new String(jPasswordField1.getPassword(),0,jPasswordField1.getPassword().length);
???? Logins yn=new Logins(name,password);
???? if(yn.yesno()){
????? this.setVisible(false);
????? qq.setVisible(true);
???? }else{jLabel4.setText("对不起,登录失败");
???? }
??? }
但是,设置了总是错误,上网请教了高手,得到原因是:
jButton1_actionPerformed 是 event handler,當他被觸發執行時是在 event-dispatching thread,UI 元件的外觀繪製也是在 event dispatching thread。在 jButton1_actionPerformed 第一次去設定 jLabel4 的 text property,儘管這會導致 jLabel4 參考的元件 repaint,但是 repaint 必須等到 jButton1_actionPerformed 執行完,接著 jButton1_actionPerformed 執行完之前又設定了 jLabel4 的 text property,於是當 jLabel4 有機會做 repaint(在 event-dispatching thread 執行其 paint method),他會依照其目前的狀態會繪製外觀(這時其 text property 已是 "對不起,登陸失敗")。
撇開以上的狀況,如果是由 event-dispatching thread 以外的 thread 去變更 JLabel text property,如果兩次變更 text property 的操作過於接近(在時間上),也會發生肉眼不易觀察(沒觀察到)第一次設定的值(人眼一秒能看到的變化大約只有 30 次)。
修改后???
以下只写了事件方法:
//单击按钮事件,使标签文字改变,获得焦点
public void jButton1_actionPerformed(ActionEvent e) {
??????? jLabel4.setText("连接服务器...");
??????? jLabel4.requestFocusInWindow(); }
//标签获得焦点,触发需要执行事件发生
??? public void jLabel4_focusGained(FocusEvent e) {
??????? String name,password;
??????? name=jTextField1.getText();
??????? password=new String(jPasswordField1.getPassword(),0,jPasswordField1.getPassword().length);
??????? Logins yn=new Logins(name,password);
??????? if(yn.yesno()){
???????? this.setVisible(false);
???????? qq.setVisible(true);
??????? }else{
????????????????? jButton1.requestFocusInWindow();
??????? }}
//在标签获得焦点后,若登录不成功,则 jButton1.requestFocusInWindow();按钮获得焦点,相应JLabel4失去焦点
public void jLabel4_focusLost(FocusEvent e) {
???????? jLabel4.setText("对不起,登录失败");}
这样就达到了目的!
???????
分享到:
相关推荐
Java调用windows字体美化窗口,显示多种字体,用JLabel实现,可以很方便 的调用宋体、黑体、Sanf等多种系统字体,轻松改变窗口界面中的字体风格,从而起到美化窗口界面的作用。代码是这样的: //字体数组: ...
通过设置JLabel的各种属性,可以控制标签的外观和行为。下面是JLabel的使用方法的详细介绍。 一、JLabel的构造方法 JLabel有多个构造方法,可以根据需要选择合适的构造方法。常用的构造方法包括: * `JLabel()`: ...
本文将详细介绍如何通过Java代码实现在程序运行时动态提取系统当前时间,并将其显示在一个`JLabel`组件上,以实现时间的实时更新。 ### 一、基础知识介绍 #### 1.1 `JLabel` 组件简介 `JLabel` 是Swing中的一种轻...
Java 编程 Swing 组件 JLabel 详解及使用示例 Java 编程中,Swing 组件 JLabel 是一个基本的组件,用于显示文本、图像或同时显示二者。JLabel 对象可以通过设置垂直和水平对齐方式,指定标签显示区中标签内容在何处...
在Java编程领域,动态文字是一种常见且吸引人的视觉效果,常用于各种软件界面、游戏或者艺术展示中。本文将深入探讨如何使用Java实现动态文字的实例,基于标题“java技能百练\特效\动态文字”和描述中的内容,我们将...
首先,我们来看`JLabelLink.java`这个文件,这很可能是自定义的一个JLabel类,用于添加超链接功能。自定义JLabel通常涉及到重写`paintComponent()`方法来绘制带有下划线的文本,并实现MouseListener接口,监听鼠标...
在Java图形用户界面(GUI)编程中,`JLabel` 是一个非常基础且重要的组件,它用于显示文本或图像。通过本篇内容,我们将深入探讨 `JLabel` 的使用方法、属性设置以及如何与其他组件进行交互。 #### 一、`JLabel` ...
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Timer; import java.util.TimerTask; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing....
在实际应用中,你可能需要根据用户需求动态改变字体样式,或者根据界面设计选择合适的字体。Java还提供了`FontMetrics`类,用于获取特定字体的尺寸信息,比如字符宽度、高度等,这对于精确布局和排版非常有用。 总...
在Java编程中,动态显示时间是一项常见的需求,尤其是在创建用户界面时。以下是对两种主要方法的详细解释,这些方法可以在Java应用程序中实时更新并显示当前时间。 1. 使用`TimerTask`: 这种方法依赖于`java.util...
`java.text` 包中的 `NumberFormat` 和 `DateFormat` 用于格式化数字和日期,`ResourceBundle` 用于管理不同语言的文本资源。 10. **安全性** Java 1.6 引入了安全管理器(Security Manager),用于控制程序的访问...
在Java编程语言中,实现文字随机移动的效果通常涉及到图形用户界面(GUI)的使用,以及对事件处理和动画原理的理解。下面将详细讲解这个主题。 首先,我们需要使用Java的Swing或JavaFX库来创建GUI。Swing是Java标准...
### Java 实现一元二次方程求解及图形界面 #### 一、项目概述 本项目旨在通过Java Swing库创建一个简单的图形用户界面(GUI),用于输入一元二次方程的系数并显示其解。一元二次方程的一般形式为: \[ ax^2 + bx +...
import java.text.NumberFormat; import javax.swing.*; import Controller.TextController; import Model.Sphere; import java.awt.*; import java.awt.event.*; public class TextView extends JPanel ...
- `java.text.SimpleDateFormat`:格式化日期和时间,将日期转换成字符串,便于在界面上显示。 - `java.time`包(自Java 8起):提供了更现代和直观的日期时间API,如`LocalTime`,可以更方便地处理时间。 4. **...
- **构造函数**:构造函数`public Text()`初始化了所有GUI组件,并设置了一些基本属性,如窗口大小、可见性和是否可调整大小。 - **事件监听器**:通过实现`ActionListener`和`TextListener`接口,可以为不同组件...
6. **国际化与本地化**:考虑到不同国家和地区对日期和月份的显示习惯不同,Java提供了`java.text.SimpleDateFormat`和`java.time.format.DateTimeFormatter`的本地化支持。可以根据用户的语言环境设置适当的日期...
### Java 显示整数个位数 #### 知识点概览 1. **Swing 组件使用**:包括 `JFrame`、`JTextField` 和 `JLabel`。 2. **事件监听器**:使用 `ActionListener` 来响应文本框中的输入事件。 3. **数字处理**:提取整数...
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import ...
`java.util.Locale`和`java.text`包提供了处理多语言环境的功能,使得程序可以根据用户的地区设置显示相应的语言和格式。 Java API 1.6 CN文档是学习和开发Java应用程序的基础资源,它详尽地解释了每一个类和方法...