带提示的JTextField之二

COLMAP生成MVSNet数据集 阅读详情
转自 一文online 昨天我们给JTextField增加了一个泡泡提示窗口,今天我们继续昨天的,首先处理在显示泡泡的时候忽略输入的Backspace、Enter、 Delete、Esc按键,然后加上错误的时候的声音提示,最后再给JTextField换装备,让它看起来像MSN 8.5beta的输入框,还是先放上图片:


这幅图是MSN的输入框,输入框的内部到光标有一部分是有点毛玻璃的感觉,不过这个style是死的,我们改进一下,我们的JTextField在输入之前是看似普通的,在鼠标放上去之后,看起来就与MSN的输入框类似了,而且我们还给这个输入框加入一个淡黄色的背景。

好了,现在很明确要做的事情了
1. 加入鼠标事件监听器,监听MouseEnter和MouseExit事件,根据这个两个事件设置不同的背景色和边框
2. 做一个能够显示毛玻璃效果的边框

以下是边框的代码和部分MyJTextField的代码,完整的代码待我会打包传上来的
MyJTextField.java
在初始化组件的时候加上Border的初始化:
        hoverBorder  =   new  CoolBorder(HOVER_BORDER_COLOR,  3 );
        border 
=  BorderFactory.createCompoundBorder( new  LineBorder(
                BORDER_COLOR, 
1 ),  new  EmptyBorder( new  Insets( 2 2 2 2 )));

        setBackground(BACKGROUND_COLOR);
        setBorder(border);
和事件的初始化:
        addMouseListener( new  MouseAdapter() {
            @Override
            
public   void  mouseEntered(MouseEvent e) {
                setBorder(hoverBorder);
                setBackground(HOVER_BACKGROUND_COLOR);
                repaint();
            }

            @Override
            
public   void  mouseExited(MouseEvent e) {
                setBorder(border);
                setBackground(BACKGROUND_COLOR);
                repaint();
            }
        });
以及屏蔽功能性按钮和发出声音提示的代码:
addKeyListener( new  KeyAdapter() {
            @Override
            
public   void  keyTyped(KeyEvent e) {
                
char  input  =  e.getKeyChar();
                
//  ESC27 ,Backspace 8 ,Enter 10, Del 127, must ignore
                 boolean  ignoreInput  =  input  ==  ( char ) KeyEvent.VK_ESCAPE
                        
||  input  ==  ( char ) KeyEvent.VK_BACK_SPACE
                        
||  input  ==  ( char ) KeyEvent.VK_ENTER
                        
||  input  ==  ( char ) KeyEvent.VK_DELETE;
                
if  (ignoreInput) {
                    limitTip.setVisible(
false );
                    numberTip.setVisible(
false );
                    
return ;
                }
                
if  (getText().length()  +   1   >  limit) {
                    Toolkit.getDefaultToolkit().beep();
                    deleteInputChar(e);
                    limitTip.setVisible(
true );
                    
return ;
                } 
else  {
                    limitTip.setVisible(
false );
                }
                
if  (numberOnly) {
                    
if  ( ! Character.isDigit(input)) {
                        numberTip.setVisible(
true );
                        Toolkit.getDefaultToolkit().beep();
                        deleteInputChar(e);
                    } 
else  {
                        numberTip.setVisible(
false );
                    }
                }
            }

            
private   void  deleteInputChar(KeyEvent source) {
                source.setKeyChar((
char ) KeyEvent.VK_CLEAR);
            }
        });


下面是Border的完整代码:
 1  /**
 2   * @(#)CoolBorder.java  0.1.2  2007-9-10
 3    */
 4  package  ruislan;
 5 
 6  import  java.awt.Color;
 7  import  java.awt.Component;
 8  import  java.awt.Dimension;
 9  import  java.awt.GradientPaint;
10  import  java.awt.Graphics;
11  import  java.awt.Graphics2D;
12  import  java.awt.Insets;
13 
14  import  javax.swing.border.Border;
15 
16  /**
17   * Custom Border.
18   * 
19   *  @version  0.1.2, 2007-9-10
20   *  @author  ruislan <a href="mailto:z17520@126.com"/>
21    */
22  public   class  CoolBorder  implements  Border {
23       private   int  thickness;
24       private  Insets insets;
25       private  Dimension lastComponentSize;
26       private  Color color;
27       private  Color color2;
28 
29       public  CoolBorder(Color color,  int  thickness) {
30           this .color  =  color;
31           if  (color  ==   null ) {
32               this .color  =  color  =  Color.gray;
33          }
34          color2  =   new  Color( 210 210 210 0 );
35           this .thickness  =  thickness;
36      }
37 
38      @Override
39       public  Insets getBorderInsets(Component c) {
40          Dimension currentComponent  =  c.getSize();
41 
42           if  (currentComponent.equals(lastComponentSize)) {
43               return  insets;
44          }
45 
46          insets  =   new  Insets(thickness, thickness, thickness, thickness);
47          lastComponentSize  =  currentComponent;
48           return  insets;
49      }
50 
51      @Override
52       public   boolean  isBorderOpaque() {
53           return   true ;
54      }
55 
56      @Override
57       public   void  paintBorder(Component c, Graphics g,  int  x,  int  y,  int  width,
58               int  height) {
59          Graphics2D g2d  =  (Graphics2D) g.create();
60           //  画上边缘
61          GradientPaint gp  =   new  GradientPaint(x, y, color, x, y  +  thickness,
62                  color2);
63          g2d.setPaint(gp);
64          g2d.fillRect(x, y, width, thickness);
65           //  画下边缘
66          gp  =   new  GradientPaint(x, y  +  height  -  thickness  -   1 , color2, x, y
67                   +  height, color);
68          g2d.setPaint(gp);
69          g2d.fillRect(x, y  +  height  -  thickness  -   1 , width, thickness);
70           //  画左边缘
71          gp  =   new  GradientPaint(x, y, color, x  +  thickness, y, color2);
72          g2d.setPaint(gp);
73          g2d.fillRect(x, y, thickness, height);
74           //  画右边缘
75          gp  =   new  GradientPaint(x  +  width  -  thickness  -   1 , y, color2, x  +  width,
76                  y, color);
77          g2d.setPaint(gp);
78          g2d.fillRect(x  +  width  -  thickness  -   1 , y, thickness, height);
79           //  画外框
80          g2d.setPaint(color);
81          g2d.drawRect(x, y, width  -   1 , height  -   1 );
82          g2d.dispose();
83      }
84 
85  }
86 

然后来欣赏我们的结果吧:

鼠标放上去之前


鼠标放上去之后

我们输入了不是数字的字符

至此,我们的JTextField又向前走了一步,下次我们还能如何改进呢?把JTextField这个死板的长方形改造成云状的或者其他形状的?

附源代码下载地址:http://www.blogjava.net/Files/ruislan/myjtextfield.zip

posted on 2007-09-10 13:21 ruislan 阅读(490) 评论(1)   编辑   收藏

FeedBack:
#  re: 带提示的JTextField之二  2007-12-18 20:52  zhouyishen@gxlu.com.cn
你好!!
   我在网上看到你这个textField的例子真的好震撼哦....崇拜一把

不过还是有点小问题, 你给textField定位的时候, 
private void determineAndSetLocation() {
Point location = attachedComponent.getLocation();
setBounds(location .x, location .y - getPreferredSize().height,
getPreferredSize().width, getPreferredSize().height);
}


但是目前您的这个XY只是textField相对于他父panel的XY,但是你要show在layeredPane.

如果这个textField在多层panel里面的话,这样计算就不对.  所以你的location应该是textfield相对于layeredPane的XY才对

所以这里我想改一下 但是我不知道如何得到textField相对于layeredPane的X和Y呢?
我只想到一个相当笨的方法, 不断getParent()后在把所以XY相加, 不知道还有其他方法吗?
【2022】人工智能☆✨ 1. 朴素⻉叶斯⽅法是⼀种 ( ) ⽅法。A.机器学习的分类B.不确定性推理C.知识表示答案:A解析:朴素贝叶斯分类器是基于贝叶斯定理与特征条件独立假设的分类方法。它通过学习训练数据集来预测未知数据的类别标签,因此属于机器学习中的监督学习分类方法。选项B不确定性推理和选项C知识表示虽然与朴素贝叶斯方法有一定的关联,但它们并不是朴素贝叶斯方法的主要应用领域或定义特性。2. 关于启发式搜索描述正确的是 ( )。 阅读详情

相关推荐

RK3568平台开发系列讲解(音频篇)配置声卡

📢本篇文章介绍如何配置声卡。

内核笔记 2397

JTextField显示提示信息

JTextField k1=new JTextField(); k1.setToolTipText("请输入编号");//当鼠标移动到输入框时出现弹出小提示 //设置默认提示信息,字体颜色设置淡灰色 k1.setText("请输入编号"); k1.setForeground(new Color(204,204,204)); //设置焦点监听 k1.addFocusListener(new FocusListener() { @Override public vo...

学习使我快乐_玉祥 3367

YOLOv11半监督学习深度解析:基于FixMatch改进的先进目标检测框架

本文探讨了半监督学习与YOLOv11结合的创新方法。针对目标检测中半监督学习面临的伪标签质量不稳定、特征一致性难保证等挑战,研究提出改进版FixMatch框架。通过分析YOLOv11架构特性(如多尺度特征提取、双标签分配策略等)与半监督学习的适配性,设计了三项关键技术改进:空间感知阈值策略、多任务解耦处理和记忆增强机制。该方法在少量标注数据下可实现接近全监督的性能,显著降低工业检测等场景的数据标注成本。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 2027

java中JTextField添加提示文字功能

在xcode中,textfield添加提示文字只需在右侧功能区自定义文字就好,然而在eclipse下开发Java.swing时(虽然几乎已经没人用swing来做GUI了...),需要自定义焦点事件来创建提示文字。 网上几乎所有教程都是实现FocusListener的interface,实在是太麻烦,而且没法配合windowbuilder来直接拖拽原组件,这里提供一种直接重写FocusAdapte...

qq_40726746的博客 8997

Java中GUI编程之JTextField文本框提示文字设置效果

最近在学GUI编程,遇到了文本框的提示文字问题,想了一下,思路还是很简单的,话不多说,咱们直接开整! 实现效果:当该文本框失去焦点且无内容时,显示该提示文字。如果用户点击了该文本框(该文本框获取到了焦点),自动清除提示文字。以此达到提示效果。 首先先创建好一个JTextField的对象 JTextField test = new JTextField("提示文字",10); 然后我们就开始做该文本框的监听事件,这里主要是针对焦点(光标)来进行监听。 text.addF.

JIE的博客 --- moon_coder 1万+

JTextField提示

2、建立一个监听类,实现文本框在“获取焦距”或“失去焦距”时的提示语的变化。1、定义一个初始化的文本框,并添加监听事件。2024.07.10记。

weixin_72377351的博客 390

JTextField 默认文字提示功能

【代码】JTextField 默认文字提示功能。

xiaoerbuyu1233的博客 336

java jtextfield 提示_提示JTextField

1/**2*@(#)MyJTextField.java0.1.12007-9-83*/4packageruislan;56importjava.awt.BorderLayout;7importjava.awt.Color;8importjava.awt.Component;9importjava.awt.Container;10importjava.awt.Font;...

weixin_39611031的博客 388

提示JTextField

转自 一文online 接着昨天的MyJTextField,我们继续为JTextField增强,今天我们为MyJTextField增加一个泡泡提示。先看图片: 当输入第三个字符a时,由于昨天我们的MyJTextField做了处理,所以a不能被输入,而且弹出泡泡提示你下次不要了哟! 同样的,下一张图片: 为MyJTextField增加泡泡提示功能要做以下几件事情: 1. 泡泡窗

塞翁失马 2493

java jtextfield 不显示,如何在JTextField java中显示默认消息

I want to create a JTextField with a message inside as a deafult. But not as a proper text but as a comment about what to type inside the JTextField.So if i type jtf.getText() it returns null or empty...

weixin_33771816的博客 287

swing 登陆界面,JTextField 圆角,JPasswordField 默认提示

JTextField 圆角: import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.Shape; import javax.swing.JTextField; public class MyRou...

yang_elbert的专栏 1464

JTextField的部分常用使用方法

本篇文章将会教会大家JTextField常用方法

m0_73229185的博客 9698

JTextField和JTextArea的简单案例(聊天窗口)

JTextField是,只能去接收文本的输入,在本程序里面做的是输入框JTextArea是,它能接收文本的输入, 在本程序里面做的是显示输出的信息。

m0_74304371的博客 1464

swing的JTextField的介绍及其使用方法

:JTextField的(文本框)使用: JTextField 是一个轻量级组件,它允许编辑单行文本。 1.JTextField的常用构造方法: JTextField() 构造一个新的 TextField。 JTextField(int columns) 构造一个具有指定列数的新的空 TextField。 JTextField(String text) 构造一个用指定文本初始化的新TextFiel...

x928526的博客 5万+

Java Swing界面编程(18)---单行文本输入组件:JTextField

以下的程序与上一例有一点区别,仔细对比不难发现其中的不同之处。 package com.beyole.util; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class test17 { public static void main(String[]

Aaron-Crystal 2596

Java 创建图形用户界面(GUI)组件详解之JFrame、JTextField、JTextArea、JPasswordField、JScrollPane、JLabel

Java 创建图形用户界面(GUI)组件详解之JFrame、JTextField、JTextArea、JPasswordField、JScrollPane、JLabel

墨鸦的博客 1万+

java文本组件(JTextField、JPasswordField、JTextArea)

文本组件在实际项目开发中使用最广泛,尤其是文本框与密码框组件,通过文本组件可以很轻松地处理单行文字、多行文字、口令字段等,下面将对文本组件的定义以及使用进行讲解。 JTextField文本框组件 文本框(JTextField)用来显示或编辑一个单行文件,在Swing中通过javax.swing.JTextField类对象创建,该类继承了javax.swing.text.JTextCompone...

qq_31755183的博客 5571

java jtextfield hint_JTextField 默认文字提示功能-Go语言中文社区

JTextField没有输入时,显示提示文字,类似于通过实现FocusListener来实现。import java.awt.Color;import java.awt.event.FocusEvent;import java.awt.event.FocusListener;import javax.swing.JTextField;public class JTextFieldHintList...

weixin_42524610的博客 864

基于88E1512的SGMII接口千兆网驱动的应用经验.pdf

应用经验中描述了利用SGMII接口+MDIO接口配置88E1512的千兆网PHY芯片的经验及程序,实测可用,且在DSP芯片TMS320C6678上进行测试使用。

基于单片机的无功补偿装置论文.doc

基于单片机的无功补偿装置论文.doc

上一篇: Java知识点Vector和ArrayList,Hashtable和HashMap,ArrayList和LinkedList的区别
下一篇: 带提示的JTextField
rcyl2003
博客等级 码龄21年 88粉丝 134原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值