图像:
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中的核心组件 - **JComponent**: 是所有Swing组件的父类,为Swing组件提供了一系列基础功能,如事件处理、绘制等。 - **属性**: `JComponent`类提供了一些常用的方法,如`add()`方法用于添加子组件...
`JComponent`是Swing组件层次结构的基础,它扩展了AWT的`Component`类,添加了许多高级特性,如内置的事件处理、可定制的外观(LookAndFeel)以及丰富的组件属性。通过`JComponent`,开发者可以方便地自定义组件的...
这些组件都是 Java 中用于构建图形用户界面的基础组件。 2. 布局管理 在这个示例中,我们使用了 BorderLayout 和 GridLayout 两种布局管理器来排列组件。BorderLayout 用于将组件分配到五个区域(north、south、...
一、Swing基础与应用 Swing是Java Foundation Classes (JFC)的一部分,提供了大量的组件,如按钮、文本框、表格等,用于构建复杂的GUI。Swing组件基于Java的轻量级组件模型,相比早期的AWT,它具有更好的可定制性和...
1. **基础组件**:JComponent不仅作为Swing组件的基础,也是自定义组件的基础。 2. **绘图支持**:它提供了一套完整的绘图基础设施,简化了组件的定制过程。 3. **键盘事件处理**:JComponent内置了键盘事件的处理...
一、Java Swing基础知识 1. 轻量级与重量级组件:Swing组件是轻量级的,基于Java的AWT(Abstract Window Toolkit)组件,比AWT更加高效,因为它们不依赖于操作系统底层的图形系统。 2. MVC设计模式:Swing组件遵循...
- **专业Swing开发者**:对于已经有一定Swing基础的开发者而言,本书可以作为一本宝贵的参考书籍,帮助他们深入理解和解决实际开发中的复杂问题。 - **Java GUI开发人员**:无论是对于正在学习Swing的新手还是已经...
一、Swing基础 Swing是Java AWT(抽象窗口工具包)的扩展,提供了更多的组件和更现代的外观。Swing组件都是轻量级的,它们在Java虚拟机内部运行,而不是依赖于操作系统提供的窗口系统。这使得Swing应用具有更好的跨...
- **Swing概述**:Swing是Java中用于构建GUI应用程序的一个轻量级组件库,它是建立在AWT基础之上的一个高级框架。Swing组件不仅提供了更丰富的功能,而且在不同操作系统上具有一致的表现形式,这主要得益于Swing采用...
#### 四、总结 本文详细介绍了如何在Java Swing中实现`JTable`的分页功能,并提供了具体的代码实现。通过这种方式,可以有效地提升应用程序处理大数据的能力,提高用户界面的响应速度和用户体验。在实际开发中,还...
在深入学习Java Swing的过程中,我们通常会经历初级、中级、高级以及特效这四个阶段的学习。 **初级篇:基础组件与布局管理** 在初级阶段,我们需要掌握Swing的基础组件,如JButton、JLabel、JTextField、JTextArea...
一、Swing基础 Swing提供了大量的组件,如JButton(按钮)、JLabel(标签)、JFrame(窗口)、JTable(表格)等,使得开发者能够快速创建各种复杂的用户界面。Swing组件是轻量级的,它们运行在Java虚拟机上,相比AWT...
四、Swing组件的属性和外观 Swing组件有许多可配置的属性,如颜色、字体、边距等。此外,Swing支持LookAndFeel,可以改变整个应用程序的视觉样式,以适应不同的操作系统或用户偏好。 五、Swing的容器和组件层次 ...
以下将详细讲解四种不同的Java Swing日历组件及其应用。 1. **单击文本框弹出日历组件选择日期** 这种方式通常通过结合`JTextField`和自定义的日历对话框实现。用户点击文本框时,会弹出一个包含日历视图的对话框...
三、Java 语言基础 * 了解 Java 语言的基本语法和数据类型,如变量、数据类型、运算符、控制流语句等。 * 了解 Java 语言的面向对象编程(OOP)概念,如类、对象、继承、多态等。 四、学生信息管理系统业务逻辑 *...
- **Swing** 以 **AWT** 为基础,但在许多方面进行了改进和扩展。Swing 组件继承自 AWT 的 `Component` 类,但大多数情况下,Swing 提供了自己的替代组件,例如 `JButton` 代替了 `Button`。 - **Swynth** 支持更...
深入学习 JFC Swing—JAVA基础类组件集,可以帮助开发者掌握构建高效、用户友好的桌面应用的技巧。通过熟悉这些组件、事件处理和布局管理,可以提升 GUI 编程能力,从而开发出功能丰富且易于使用的应用程序。
在"swingComponent"这个主题中,我们主要关注的是四个特定的组件:RadioButtonPanel、ToolbarPanel、CheckBoxPanel和PasswordPanel。 1. **RadioButtonPanel**: 在Swing中,`RadioButton`通常用于创建一组互斥的...
* 学习 JFrame 窗口类是学习其他组件的基础。 * JFrame 窗口类简介:在开发的 Swing 程序中,通常是通过继承 JFrame 窗口类来实现窗口的。 5. JFrame 窗口类的构造器: * JFrame 窗口类具有四种构造器。 * 最...