`

带水印(背景)的JTextField

阅读更多

《Swing Hacks》中说:Swing的各种特性中最没有被充分利用的就是其部分重写绘图代码的能力,在改善窗口外观时,大部分程序要么使用渲染器,要么就完全重绘代码,其实通过部分重写绘图代码,就能创建很有用的绘图效果。实际代码如下,部分注释解释了其原理:

package com.qing;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.TexturePaint;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class WatermarkTextField extends JTextField {
	private static final long serialVersionUID = 1L;
	public static final Image LOG = new ImageIcon(
			WatermarkTextField.class.getResource("/resource/images/LOG.png"))
			.getImage();
	private BufferedImage img;
	private TexturePaint texture;

	/**
	 * 构造函数通过传递一张图作为其背景图
	 * 
	 * @param file:图像文件
	 * @throws IOException
	 */
	public WatermarkTextField(File file) throws IOException {
		// 通过文件的方式获取BufferedImage
		img = ImageIO.read(file);
		// 根据指定图像的大小创建一个基准矩形,此矩形和图像大小相等(如果想矩形小一点,,也可绘制部分)
		Rectangle rect = new Rectangle(0, 0, img.getWidth(null),
				img.getHeight(null));
		/** TexturePaint 类提供一种用于被指定为 BufferedImage 的纹理填充 Shape 的方式 **/
		texture = new TexturePaint(img, rect);
		// 使此文本框透明
		setOpaque(false);
	}

	@Override
	public void paintComponent(Graphics g) {
		/** 在调用父类的绘图方法前绘制好背景 **/
		Graphics2D g2 = (Graphics2D) g;
		// 为 Graphics2D 设置 TexturePaint 属性
		g2.setPaint(texture);
		// 获取文本框的的大小,并将其全部填充
		g.fillRect(0, 0, getWidth(), getHeight());
		
		// 然后重用父类的绘图方法,比如绘制文本字符信息等
		super.paintComponent(g);
	}

         //到此已经完成文本框背景图的重绘,下面进行测试
	public static void main(String[] args) throws Exception {
		JFrame frame = new JFrame("Swing Hacks 005:添加背景的文本框");
		frame.setIconImage(LOG);

		JTextField textfield = new WatermarkTextField(new File(
				WatermarkTextField.class
						.getResource("/resource/images/red.png").toURI()));
		textfield.setText(" Thia ia a TextField ");
		textfield.setFont(textfield.getFont().deriveFont(50f));//设置文本字体
		frame.getContentPane().add(textfield, BorderLayout.NORTH);
		frame.pack();
		frame.setVisible(true);
	}
}

效果如下:

 

  • 大小: 25.3 KB
分享到:
评论

相关推荐

    原创:java封装了的JTextField,可以达到google输入框的效果

    Java中的`JTextField`是Swing库中一个基础的组件,用于创建文本输入字段。它允许用户输入单行文本,并且通常与`Document`对象关联,`Document`管理`JTextField`中的数据。在标准的`JTextField`中,虽然没有内置的...

    JTextField限制最大数字.txt

    #### 一、背景与需求分析 在开发基于Java Swing的应用程序时,我们经常需要处理用户输入数据的有效性检查。例如,在一个简单的数值输入框(`JTextField`)中,可能需要限制用户仅能输入数字,并且这个数字还需要在一...

    jTextField中关键字加颜色

    - **`Highlighter` 接口**:这是一个允许用户用带有颜色的区域标出文本背景的对象接口。它定义了如何在文本组件上创建、删除和修改高亮显示的方法。 - **`addHighlight()` 方法**:此方法用于向文本组件添加高亮显示...

    JTextField添加“自动完成”

    在Java Swing应用中,为了提升用户体验,经常需要为`JTextField`添加“自动完成”(Auto-Completion)功能。这个功能允许用户在输入文本时,系统能够自动匹配并显示可能的建议,类似于搜索引擎或邮件客户端的地址...

    java JTextField美化Demo

    实现圆角矩形边框,hint文字,主要代码: ... JTextField textField = (JTextField) c; if ("".equals(textField.getText())) { g2d.setColor(Color.BLACK); g2d.drawString("请输入文字...", 10, 18); }

    JTextField_Example.java

    JTextField_Example.java

    java JTextField组件的使用

    可以通过`setFont()`改变字体,`setForeground()`和`setBackground()`改变前景和背景颜色。 8. **组合使用** JTextField常与JLabel搭配使用,形成用户界面的标准输入框。例如: ```java JLabel label = new ...

    JTextField输入时实现位数监听

    在Java Swing库中,`JTextField`是一个常用的组件,用于接收用户输入的文本。当我们需要在用户输入时实时检查或限制输入的字符数量,比如实现位数监听,我们可以利用`DocumentListener`接口来达成目标。这个接口允许...

    控制JTextField的输入

    在Java Swing中,`JTextField` 是一个常用的组件,用于接收用户输入的单行文本。在实际应用中,我们可能需要对用户输入进行控制,比如限制输入的字符类型、长度或者格式,以满足特定的需求。这篇博客“控制...

    弹窗辅助输入JTextField

    在Java Swing应用开发中,有时候我们需要提供一种更加用户友好的输入方式,比如在输入框(JTextField)中输入内容时,能实时根据已输入的字符给出匹配建议,以辅助用户快速选择目标信息。这种功能常见于订机票时输入...

    Java Swing JTextField文本框的代码示例

    它是 javax.swing.JTextField 类的实例,可以通过多种方式创建,例如不带参数的构造方法、带文本参数的构造方法、带列数参数的构造方法等。 常用构造方法 JTextField 有多种构造方法,例如: * `JTextField()`: ...

    Text_JTextField.class

    Text_JTextField.class

    jisuanqi.rar_jtextfield

     在完成Swing的学习后,练习使用Swing包中JFrame、JButton、JLabel、JTextField、JMenu、JMenuItem等组件完成图形界面绘制。 前期能够独立思考并完成计算器的逻辑代码。 熟练使用JButton、JTextField、JLabel等...

    Jframe添加背景图片

    - **初始化变量**:这里定义了多个Swing组件,包括`JFrame`、`JTextField`、`JLabel`和`JButton`等,以及`ImageIcon`和`Image`对象用于存储背景图片。 ```java void init() { load.setBounds(560, 300, 350, 220)...

    Swing GUI设置登录界面的背景图片并把内容放到图片上面源码

    以上代码示例展示了如何在Swing中创建一个带有背景图片的登录界面,并将登录表单组件放置在图片之上。当然,实际应用中可能还需要考虑更多的细节,比如响应式设计、错误处理和用户交互等。对于初学者来说,理解并...

    java swing-JTextField的使用

    JTextField是Java Swing库中的一个组件类,用于接收用户的文本输入。

    java swing文本框(密码框)没有内容时,占位显示默认信息(仿IOS)

    首先,我们需要理解`JTextField`和`JPasswordField`的基本用法。`JTextField`是一个单行文本输入框,用户可以在其中输入任意字符。`JPasswordField`则用于隐藏输入的字符,通常用于输入密码,显示为星号或圆点。 ...

    简单的网页浏览器

    JTextField jurl=new JTextField(60); JEditorPane jEditorPanel=new JEditorPane(); JScrollPane scrollPane=new JScrollPane(jEditorPanel); // JWindow window=new JWindow(WebBrowser.this); // Toolkit ...

    Java Swing中的文本框(JTextField)与文本区(JTextArea)使用实例

    在Java Swing中,文本框(JTextField)和文本区(JTextArea)是两个常见的组件,用于接收用户的文本输入。它们是构建用户界面的重要元素,通常用于数据输入或者多行文本展示。 一、JTextField(文本框)的使用 1. 构造...

Global site tag (gtag.js) - Google Analytics