画布
导航 用户界面 主题: ) |
Java 编程中一个必不可少的部分要求您为自己构建令人兴奋的新用户界面。内置于 Java 框架中的组件是常规的 UI 元素,但是为了获得更丰富的体验,您需要自己的控件。例如,图表应用程序。Java API 中没有内置任何图表工具。您需要手动绘制图表。
从一开始,编码绘制就相当令人生畏,但一旦您了解了 Java 中图形编程的基础知识,您就可以在短时间内创建优雅的图形和艺术品。但是,人们脑海中出现的疑问是,要画在什么上面呢?这个问题的答案比看起来简单。您可以开始在 Java 框架中的任何组件上绘制。无论是面板、窗口,甚至按钮。
让我为您分解一下。Java 语言中的组件是一个从 Component
类派生的类。每个组件都有一个方法,其签名为 paint(Graphics)
,可以重写以在它上面手动绘制某些内容。
以下是一个关于如何重写上述方法的示例。对于这个具体的示例,我们将使用的组件类是 Canvas
类。有关 Canvas
类的更多信息,请参见有关 了解 Canvas 类 部分
代码清单 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. */
}
}
|
代码清单 9.1 展示了在 Java 中启用图形功能的语法的简单性和强大功能。让我们从了解 Canvas
类做了什么开始。一个 Canvas
类是 Component
类的派生类或子类,当放在 Frame
上时,显示为一个空白区域。
为了绘制图形,您可以使用任何其他从 Component
类派生的类,例如 JPanel
,甚至 JTextField
或 JButton
。我们使用 Canvas
类纯粹是为了理解 Java 中的绘制概念。
让我们改进上面的代码,使该类可执行,并显示 Canvas。为此,我们将添加一个入口点方法,即 main(String[])
方法,并在其主体中调用 JFrame
类来加载 Canvas。
代码清单 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 位于框架顶部,只是尚未显示任何绘制内容。
现在,我们已经制定了程序的基本结构,我们需要探索如何通过编写 Java 代码来实际进行绘制。转到下一节,尝试绘制基本形状和线条。但是,当您仍然对 Canvas 的概念比较陌生时,为什么不测试一下您的知识呢?尝试回答以下问题。
问题 9.1:在 Java 中使用哪些类来绘制?
- 任何从
Object
类派生的类。 - 任何从
Component
类派生的类。 - 以上都不是。
2
从 Object
类派生的类不是可见组件,而从 Component
类派生的类是位于 Container
之上的可见实体,因此是显示图形的理想候选者。
问题 9.2:为了启用绘制,需要覆盖哪种方法?
- The
main(String[])
方法。 - The
MyCanvas()
方法。 - The
paint(Graphics)
方法。 - 以上都不是。
3
如前所述,paint(Graphics)
方法是正确选项。名称说明了一切。