`
zhuobinzhou
  • 浏览: 136627 次
  • 性别: 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初学者入门教程

    #### 四、Swing中的核心组件 - **JComponent**: 是所有Swing组件的父类,为Swing组件提供了一系列基础功能,如事件处理、绘制等。 - **属性**: `JComponent`类提供了一些常用的方法,如`add()`方法用于添加子组件...

    精通java-swing开发.doc

    `JComponent`是Swing组件层次结构的基础,它扩展了AWT的`Component`类,添加了许多高级特性,如内置的事件处理、可定制的外观(LookAndFeel)以及丰富的组件属性。通过`JComponent`,开发者可以方便地自定义组件的...

    Swing实现一个简单的计算器

    这些组件都是 Java 中用于构建图形用户界面的基础组件。 2. 布局管理 在这个示例中,我们使用了 BorderLayout 和 GridLayout 两种布局管理器来排列组件。BorderLayout 用于将组件分配到五个区域(north、south、...

    用swing制作的简单图书管理系统

    一、Swing基础与应用 Swing是Java Foundation Classes (JFC)的一部分,提供了大量的组件,如按钮、文本框、表格等,用于构建复杂的GUI。Swing组件基于Java的轻量级组件模型,相比早期的AWT,它具有更好的可定制性和...

    java swing

    1. **基础组件**:JComponent不仅作为Swing组件的基础,也是自定义组件的基础。 2. **绘图支持**:它提供了一套完整的绘图基础设施,简化了组件的定制过程。 3. **键盘事件处理**:JComponent内置了键盘事件的处理...

    javaswing详解

    一、Java Swing基础知识 1. 轻量级与重量级组件:Swing组件是轻量级的,基于Java的AWT(Abstract Window Toolkit)组件,比AWT更加高效,因为它们不依赖于操作系统底层的图形系统。 2. MVC设计模式:Swing组件遵循...

    Manning Swing 2nd(英文版)

    - **专业Swing开发者**:对于已经有一定Swing基础的开发者而言,本书可以作为一本宝贵的参考书籍,帮助他们深入理解和解决实际开发中的复杂问题。 - **Java GUI开发人员**:无论是对于正在学习Swing的新手还是已经...

    基于Swing的文件操作

    一、Swing基础 Swing是Java AWT(抽象窗口工具包)的扩展,提供了更多的组件和更现代的外观。Swing组件都是轻量级的,它们在Java虚拟机内部运行,而不是依赖于操作系统提供的窗口系统。这使得Swing应用具有更好的跨...

    swing教程之经典

    - **Swing概述**:Swing是Java中用于构建GUI应用程序的一个轻量级组件库,它是建立在AWT基础之上的一个高级框架。Swing组件不仅提供了更丰富的功能,而且在不同操作系统上具有一致的表现形式,这主要得益于Swing采用...

    Java Swing JTable分页

    #### 四、总结 本文详细介绍了如何在Java Swing中实现`JTable`的分页功能,并提供了具体的代码实现。通过这种方式,可以有效地提升应用程序处理大数据的能力,提高用户界面的响应速度和用户体验。在实际开发中,还...

    java swing深入学习例子

    在深入学习Java Swing的过程中,我们通常会经历初级、中级、高级以及特效这四个阶段的学习。 **初级篇:基础组件与布局管理** 在初级阶段,我们需要掌握Swing的基础组件,如JButton、JLabel、JTextField、JTextArea...

    swing-学生选课系统

    一、Swing基础 Swing提供了大量的组件,如JButton(按钮)、JLabel(标签)、JFrame(窗口)、JTable(表格)等,使得开发者能够快速创建各种复杂的用户界面。Swing组件是轻量级的,它们运行在Java虚拟机上,相比AWT...

    swing各个组件实例演示

    四、Swing组件的属性和外观 Swing组件有许多可配置的属性,如颜色、字体、边距等。此外,Swing支持LookAndFeel,可以改变整个应用程序的视觉样式,以适应不同的操作系统或用户偏好。 五、Swing的容器和组件层次 ...

    四种Java Swing日历组件

    以下将详细讲解四种不同的Java Swing日历组件及其应用。 1. **单击文本框弹出日历组件选择日期** 这种方式通常通过结合`JTextField`和自定义的日历对话框实现。用户点击文本框时,会弹出一个包含日历视图的对话框...

    java(swing)+ mysql实现学生信息管理系统

    三、Java 语言基础 * 了解 Java 语言的基本语法和数据类型,如变量、数据类型、运算符、控制流语句等。 * 了解 Java 语言的面向对象编程(OOP)概念,如类、对象、继承、多态等。 四、学生信息管理系统业务逻辑 *...

    Java swing 知识总结学习笔记

    - **Swing** 以 **AWT** 为基础,但在许多方面进行了改进和扩展。Swing 组件继承自 AWT 的 `Component` 类,但大多数情况下,Swing 提供了自己的替代组件,例如 `JButton` 代替了 `Button`。 - **Swynth** 支持更...

    jfc+swing—java基础类组件集

    深入学习 JFC Swing—JAVA基础类组件集,可以帮助开发者掌握构建高效、用户友好的桌面应用的技巧。通过熟悉这些组件、事件处理和布局管理,可以提升 GUI 编程能力,从而开发出功能丰富且易于使用的应用程序。

    swingComponent

    在"swingComponent"这个主题中,我们主要关注的是四个特定的组件:RadioButtonPanel、ToolbarPanel、CheckBoxPanel和PasswordPanel。 1. **RadioButtonPanel**: 在Swing中,`RadioButton`通常用于创建一组互斥的...

    java Swing桌面程序开发课件

    * 学习 JFrame 窗口类是学习其他组件的基础。 * JFrame 窗口类简介:在开发的 Swing 程序中,通常是通过继承 JFrame 窗口类来实现窗口的。 5. JFrame 窗口类的构造器: * JFrame 窗口类具有四种构造器。 * 最...

Global site tag (gtag.js) - Google Analytics