`
zhuobinzhou
  • 浏览: 133852 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类

Swing基础(四)

阅读更多

图像:

import java.awt.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;

/**
 * @version 1.33 2007-04-14
 * @author Cay Horstmann
 */
public class ImageTest {
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				ImageFrame frame = new ImageFrame();
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				frame.setVisible(true);
			}
		});
	}
}

/**
 * A frame with an image component
 */
class ImageFrame extends JFrame {
	public ImageFrame() {
		setTitle("ImageTest");
		setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

		// add component to frame

		ImageComponent component = new ImageComponent();
		add(component);
	}

	public static final int DEFAULT_WIDTH = 300;
	public static final int DEFAULT_HEIGHT = 200;
}

/**
 * A component that displays a tiled image
 */
class ImageComponent extends JComponent {
	public ImageComponent() {
		// acquire the image
		try { // 通过ImageIO类的静态方法read获得图片对象
			image = ImageIO.read(new File("blue-ball.gif"));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void paintComponent(Graphics g) {
		if (image == null)
			return;
		// 获得图片的宽度
		int imageWidth = image.getWidth(this);
		// 获得图片高度
		int imageHeight = image.getHeight(this);

		// draw the image in the upper-left corner
		// 描绘第一个图片
		g.drawImage(image, 0, 0, null);
		// tile the image across the component

		for (int i = 0; i * imageWidth <= getWidth(); i++) {
			for (int j = 0; j * imageHeight <= getHeight(); j++) {
				if (i + j > 0) {// 描绘其他图片
					g.copyArea(0, 0, imageWidth, imageHeight, i * imageWidth, j
							* imageHeight);
				}
			}
		}
	}

	private Image image;
}

 

 

为文本设定特殊字符:

 

import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import javax.swing.*;

/**
 * @version 1.33 2007-04-14
 * @author Cay Horstmann
 */
public class FontTest
{
   public static void main(String[] args)
   {//事件调度
      EventQueue.invokeLater(new Runnable()
         {
    	  	@Override
            public void run()
            {
               FontFrame frame = new FontFrame();
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
            }
         });
   }
}

/**
 * A frame with a text message component
 */
class FontFrame extends JFrame
{
   public FontFrame()
   {
      setTitle("FontTest");
      setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

      // add component to frame

      FontComponent component = new FontComponent();
      add(component);
   }

   public static final int DEFAULT_WIDTH = 300;
   public static final int DEFAULT_HEIGHT = 200;
}

/**
 * A component that shows a centered message in a box.
 */
class FontComponent extends JComponent
{
   public void paintComponent(Graphics g)
   {	//获得Graphics2D对象
      Graphics2D g2 = (Graphics2D) g;

      String message = "Hello, World!";
      //创建Font对象
      Font f = new Font("Serif", Font.BOLD, 36);
      //设置字体
      g2.setFont(f);

      // measure the size of the message
      /*FontRenderContext 类是正确测量文本所需的信息容器。
       * 因为将轮廓映射到像素的规则不同,而且应用程序提供的呈现提示不同,
       * 所以文本的测量也有所不同。 */
      FontRenderContext context = g2.getFontRenderContext();
     /* 回指定 FontRenderContext 中指定 String 的逻辑边界。
               逻辑边界包含 origin、ascent、advance 和 height,其中包括了 leading。
                逻辑边界并不总是包围所有文本。例如,在某些语言和字体中,
      accent 标记可以位于 ascent 之上,或 descent 之下。
                要得到可视的边界框(它包围了所有文本),可以使用 TextLayout 的 getBounds 方法。 */
      Rectangle2D bounds = f.getStringBounds(message, context);

      // set (x,y) = top left corner of text

      double x = (getWidth() - bounds.getWidth()) / 2;
      double y = (getHeight() - bounds.getHeight()) / 2;

      // add ascent to y to reach the baseline

      double ascent = -bounds.getY();
      double baseY = y + ascent;

      // draw the message
      //描绘mesaage
      g2.drawString(message, (int) x, (int) baseY);
      //设置画笔颜色
      g2.setPaint(Color.LIGHT_GRAY);

      // draw the baseline
      //描绘基线
      g2.draw(new Line2D.Double(x, baseY, x + bounds.getWidth(), baseY));

      // draw the enclosing rectangle
     //描绘长方形框
      Rectangle2D rect = new Rectangle2D.Double(x, y, bounds.getWidth(), bounds.getHeight());
      g2.draw(rect);
   }
}

 

分享到:
评论

相关推荐

    汽车租赁swing项目.zip

    简单的java Swing项目 全自己手敲,用于基础学习Swing,暂时还未连接数据库。仅供参考。 汽车租赁框架功能比较齐全。

    Java语言程序设计(理论基础部分)ppt

    6 第五章 Java Swing基础 7 第六章 Java图形与图像处理 8 第七章 多线程与异常处理 9 第八章 数据流(1) 10 第八章 数据流(2) 11 第九章 网络编程 12 第十章 Java数据库连接 13 第十一章 数据结构及算法分析 ...

    JAVA swing+mysql 进销存管理系统

    此套系统首先分为五大部分,分别为登录、首页、基础数据、进销存管理、用户管理,首页为欢迎页面,基础数据下设商品管理功能模块,进销存管理下设销售单、入库单、出库单、仓库管理四个功能模块,用户管理为单独...

    java swing图书管理系统 -csdn.zip

    基于Java Swing+mysql实现...系统主要有四个模块:基础数据维护(图书类型、图书信息的维护),新书订购管理(新书的预定、验收),借阅管理(读者管理、借书订单维护等),系统维护(管理员信息维护,密码修改等)。

    基于JavaSwing的计算器【100012137】

    该计算器程序以java语言为基础,外观设计以Windows 10系统计算器为模板,在还原磨砂透明的UI的同时,对键盘部分的设计参考了腹灵F11键盘的配色。本计算器具备计算的基本功能,如:加、减、乘、除的四则运算;具备...

    《Java核心技术 卷Ⅰ:基础知识(原书第8版)》(中文高清PDF) 第四部分(共四部分)

    第四部分,其他部分在我的上传资源列表里面寻找 本书针对JavaSE6平台进行了全面更新,并通过大量测试过的示例说明了最重要的语言特性和类库特性。本书示例程序经过精心地设计,不但具有实用价值,而且易阅读、易...

    《Java核心技术 卷Ⅰ:基础知识(原书第8版)》(中文高清PDF) 第一部分(共四部分)

    这是第一部分,其他部分可以在我的上传资源列表里寻找。 本书针对JavaSE6平台进行了全面... ■Swing图形用户界面程序设计  ■打包应用程序  ■异常处理  ■登录与调试  ■泛型程序设计  ■集合框架  ■多线程

    Java&OOP-电子档源码+课件

    第一章:Java 简介第二章:Java 语言基础第三章:面向对象的概念和 Java 实现-1第四章:面向对象的概念和 Java 实现-2第五章:异 常第六章:java.lang包第七章:java.util 包第八章:java.io 包 第九章:JBuilder ...

    《Java核心技术 卷Ⅰ:基础知识(原书第8版)》(中文高清PDF) 第二部分(共四部分)

    第2部分,其他部分在我的上传资源列表里面寻找 本书针对JavaSE6平台进行了全面更新,并... ■Swing图形用户界面程序设计  ■打包应用程序  ■异常处理  ■登录与调试  ■泛型程序设计  ■集合框架  ■多线程

    Java2核心技术卷I+卷2:基础知识(第8版) 代码

    Swing and the Model-View-Controller Design Pattern 362 Introduction to Layout Management 368 Text Input 377 Choice Components 385 Menus 406 Sophisticated Layout Management 424 Dialog Boxes 452 ...

    斗地主.rar

    Javaswing 四人斗地主 有少量BUG 建议有一定基础的人下载

    《Java核心技术 卷Ⅰ:基础知识(原书第8版)》(中文高清PDF) 第三部分(共四部分)

    这是第三部分,其他部分在我的资源上传列表里面找到。 本书针对JavaSE6平台进行了全面更新... ■Swing图形用户界面程序设计  ■打包应用程序  ■异常处理  ■登录与调试  ■泛型程序设计  ■集合框架  ■多线程

    Java技术教程.基础篇

    第一章 java概述 第二章 数据类型 第三章 运算符和表达式 ...第十三章 用Swing创建用户界面 第十四章 Java小应用程序\(Applet和JApplet\) 第十五章 集合框架 第十六章 网络通信 第十七章 JSP技术 以及它们的例子

    Java 中文入门学习手册合集[chm版]

    第三章 Java程序设计基础 第四章 Java应用程序的基本框架 第五章 Java的类 第六章 Java图形用户接口 第七章 多线程 第八章 Java的"异常" 第九章 Java输入输出操作 java新手教程.chm JAVA_精通swing程序设计...

    Java SE实践教程 pdf格式电子书 下载(四) 更新

    Java SE实践教程 pdf格式电子书 下载(四) 更新 http://download.csdn.net/source/2824046 内容简介:此书结合具体实例讲解,通俗易懂,又不乏深度。我觉得这本书写的确实不错,堪称经典,市面上这样的书实在太少...

    IBM-JAVA教程

    第九章 JFC与Swing图形组件.ppt 第十章 国际化和 Applet.ppt 第十一章 输入输出处理——流的处理.ppt 第十二章 输入输出处理——文件操作.ppt 第十三章 输入输出处理——网络编程.ppt 第十四章 多线程.ppt 第十五章 ...

    Java语言基础下载

    第四章: Java语法基础 47 学习目标 47 基本语法元素 48 Java关键字 49 基本Java数据类型 50 变量声明和赋值 52 引用(Reference)类型 52 存储器分配和布局 53 this引用 55 Java编码约定 56 运算符的优先级 58 升级...

    朱福喜java入门精品课件【带代码】

    第四章 继承与多态;第五章 图形界面基础;第六章 Swing编程;第七章 输入输出流;第八章 异常处理与多线程;第九章 applet与JApplete;第十章 抽象数据类型与泛型;第十一章 网络编程;第十二章 java与数据库的链接

    MyEclipse6 Java开发中文教程_全部18章

    第三章 Eclipse 的基础概念,配置和使用 第四章 用MyEclipse Database Explorer管理数据库 第五章 开发JDBC 应用 第六章 管理应用服务器 第七章 开发Hibernate 应用 第八章 开发Web 应用 第九章 开发Struts 1.x 应用...

    Java语言程序设计李尊朝版课后习题答案

    全书共16章, 内容包括Java概述、Java基础、基本控制结构、方法、数组、类和对象、类的继承和多态机制、接口和包、异常处理、输入与输出、图形用户界面设计、Swing组件、Applet程序、多线程、数据库编程和网络编程。...

Global site tag (gtag.js) - Google Analytics