跳转到内容

画布

100% developed
来自维基教科书,开放世界中的开放书籍

导航 用户界面 主题:v  d  e )


Java 编程中一个必不可少的部分要求您为自己构建令人兴奋的新用户界面。内置于 Java 框架中的组件是常规的 UI 元素,但是为了获得更丰富的体验,您需要自己的控件。例如,图表应用程序。Java API 中没有内置任何图表工具。您需要手动绘制图表。

从一开始,编码绘制就相当令人生畏,但一旦您了解了 Java 中图形编程的基础知识,您就可以在短时间内创建优雅的图形和艺术品。但是,人们脑海中出现的疑问是,要画在什么上面呢?这个问题的答案比看起来简单。您可以开始在 Java 框架中的任何组件上绘制。无论是面板、窗口,甚至按钮。

让我为您分解一下。Java 语言中的组件是一个从 Component 类派生的类。每个组件都有一个方法,其签名为 paint(Graphics),可以重写以在它上面手动绘制某些内容。

重写 paint(Graphics) 方法

[编辑 | 编辑源代码]

以下是一个关于如何重写上述方法的示例。对于这个具体的示例,我们将使用的组件类是 Canvas 类。有关 Canvas 类的更多信息,请参见有关 了解 Canvas 类 部分

Computer code 代码清单 9.1:初始化 Canvas 类
import java.awt.*;

public class MyCanvas extends Canvas {

    public MyCanvas() {
        //...
    }

    public void paint(Graphics graphics) {
        /* We override the method here. The graphics
         * code comes here within the method body. */
    }
}

了解 Canvas

[编辑 | 编辑源代码]

代码清单 9.1 展示了在 Java 中启用图形功能的语法的简单性和强大功能。让我们从了解 Canvas 类做了什么开始。一个 Canvas 类是 Component 类的派生类或子类,当放在 Frame 上时,显示为一个空白区域。

为了绘制图形,您可以使用任何其他从 Component 类派生的类,例如 JPanel,甚至 JTextFieldJButton。我们使用 Canvas 类纯粹是为了理解 Java 中的绘制概念。

注意
注意每个类名称之前的 J。这表明这些类是 Java Swing 库的一部分。Swing 比 AWT 在 Java 中绘制表达式方面提供了更多自由。

让我们改进上面的代码,使该类可执行,并显示 Canvas。为此,我们将添加一个入口点方法,即 main(String[]) 方法,并在其主体中调用 JFrame 类来加载 Canvas。

Computer code 代码清单 9.2:在 JFrame 上方显示 Canvas 类
import java.awt.*;
import javax.swing.*;

public class MyCanvas extends Canvas {
    public MyCanvas() {
    }

    public void paint(Graphics graphics) {
    }

    public static void main(String[] args) {
        // We initialize our class here
        MyCanvas canvas = new MyCanvas();
        JFrame frame = new JFrame();
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // Here we add it to the frame
        frame.getContentPane().add(canvas);
        frame.setVisible(true);
    }
}

以下代码现在帮助我们的类变得可执行,并在显示时在框架上方显示 Canvas。运行此类将导致一个空框架,但是应该清楚的是 Canvas 位于框架顶部,只是尚未显示任何绘制内容。

图 9.1:JFrame 上方的一个空白 Canvas

获取、设置、绘制!

[编辑 | 编辑源代码]

现在,我们已经制定了程序的基本结构,我们需要探索如何通过编写 Java 代码来实际进行绘制。转到下一节,尝试绘制基本形状和线条。但是,当您仍然对 Canvas 的概念比较陌生时,为什么不测试一下您的知识呢?尝试回答以下问题。

问题 9.1:在 Java 中使用哪些类来绘制?

  1. 任何从 Object 类派生的类。
  2. 任何从 Component 类派生的类。
  3. 以上都不是。
答案

2
Object 类派生的类不是可见组件,而从 Component 类派生的类是位于 Container 之上的可见实体,因此是显示图形的理想候选者。

问题 9.2:为了启用绘制,需要覆盖哪种方法?

  1. The main(String[]) 方法。
  2. The MyCanvas() 方法。
  3. The paint(Graphics) 方法。
  4. 以上都不是。
答案

3
如前所述,paint(Graphics) 方法是正确选项。名称说明了一切。


华夏公益教科书