《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
分享到:
相关推荐
//Highlighter:一个允许用户用带有颜色的区域标出背景的对象接口 for (f = 0; f (); f++) { if (i ()) { mad = h.substring(f, i++).toString(); //System.out.println(str); } if (jTextField1.getText()....
原创:java封装了的JTextField,可以达到google输入框的效果:在输入框中输入一些字符即可联想。
对JTextField限制只能输入数字,且在0至999范围内
java JTextField组件的使用 java JTextField组件的使用 java JTextField组件的使用
JTextField添加“自动完成”,代码简单强大
JTextField_Example.java
实现圆角矩形边框,hint文字,主要代码: ... JTextField textField = (JTextField) c; if ("".equals(textField.getText())) { g2d.setColor(Color.BLACK); g2d.drawString("请输入文字...", 10, 18); }
Text_JTextField.class
在完成Swing的学习后,练习使用Swing包中JFrame、JButton、JLabel、JTextField、JMenu、JMenuItem等组件完成图形界面绘制。 前期能够独立思考并完成计算器的逻辑代码。 熟练使用JButton、JTextField、JLabel等...
扩展JTextField功能,使之能在输入一段字符后弹出下拉列表,在集合中匹配相似的信息,辅助完成整个输入,效果类似在订机票时输入目的地时辅助输入的形式.可在JTable中使用
JTextField是Java Swing库中的一个组件类,用于接收用户的文本输入。
JTextField jurl=new JTextField(60); JEditorPane jEditorPanel=new JEditorPane(); JScrollPane scrollPane=new JScrollPane(jEditorPanel); // JWindow window=new JWindow(WebBrowser.this); // Toolkit ...
NULL 博文链接:https://zhangqkunkun.iteye.com/blog/815897
主要介绍了Java Swing JTextField文本框的代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
我想给您的文本增加一点...您可以禁用JTextField:JTextField oText = new JTextField(); oText.setEnable(false);它将不接受任何此类输入。如何使用TextFields [^] EDIT:有点棘手-函数setEnable(boolean)是...
主要介绍了Java Swing中的文本框(JTextField)与文本区(JTextArea)使用实例,Swing是一个用于开发Java应用程序用户界面的开发工具包,需要的朋友可以参考下
使JTextField与条形码扫描仪兼容的代码。 它可以用作常规的JTextField,但是当它检测到输入来自条形码扫描仪时,它将转换输入并触发事件。 Convertint输入表示将字符&é“((§è!çà)分别转换为1234567890。...
实现信息检索功能 像百度的网页搜索框 搜索相关资源并可以选择并显示搜索结果 使用JTable作为搜索结果显示框 在网上找不到相关的资源 自已写了一个 这只是提供一个思路 如果有更好的想法 可以联系我 ...
3gp视频的分割格式转换视频... JTextField jTextField3 = new JTextField(); // 产生文本录入组件 JTextField jTextField4 = new JTextField(); JTextField jTextField5 = new JTextField(); // 产生文本录入组件 }