Cod*_*ein 6 java swing awt jframe graphics2d
通常,例如,当我创建一个类时,Customer我会给它一些数据字段,即public int IdNumber;一些方法,即public String getName(){...}.但这就是它.我不能超越它并开始玩图形 - 我只能操纵和组织数据,只要类允许.
我无法理解JFrame中发生的事情.谁写了JFrame类,他们是怎么写一个可以让一个盒子出现在屏幕上的类?内部会发生什么导致这种情况发生?无论如何都要模仿它吗?
同样的问题适用于所有基于图形的Java类.我真的很想知道它是如何工作的,因为每次我使用其中一个都会困扰我.
Java 从awt (抽象窗口工具包)开始,后来引入了swing。
在AWT中,平台事件处理循环被挂钩,事件被打包在自己的 java 类中,并且一个(非并行)事件处理队列/线程一个接一个地处理它们。Swing继承了这一点。
在AWT中,每个 GUI 组件(如单选按钮或菜单项)都有一个本机代码“对等”控件,即平台提供的组件。有一组并行的 Java 类及其对应的 C 类。特别有趣的是 java Graphics 类,它允许自定义绘制线条、矩形等。它在 Windows 下与 CDC(设备上下文)对等 - 大概如此。
在Swing中,大多数平台组件都是模拟的,即重新创建自己:绘图、鼠标处理等等。所以本机部分更简单,比如带有自定义绘图的 CWnd(窗口组件)。
Swing可以实现更加一致且功能更加丰富的功能。您可以想象,在 AWT 单选按钮上设置背景颜色可能是不可能的,或者在标签或工具提示上使用 HTML 可能是不可能的。Swing 还可以进行换肤、主题、LookAndFeels。该系统的外观和感觉与平台组件非常相似。特别是 Swing 组件更加轻量级,因为并非每个组件都有要在 C 中处理的本机对等控件。
现在SWT是IBM后来在Eclipse中实现的一项举措,用于重新加载AWT。不像 Swing 那样可定制,但旨在接近平台。
您应该忘记使用 AWT 组件,如果不是为 eclipse RCP 编程,也应该忘记使用 SWT。
因此:全局平台事件(如鼠标单击、重绘请求)被转换为 Java 事件。有 JFrame、JPanels、JScrollPanes、JComponents 的容器层次结构。一个事件被分派到处理组件,例如调用paintComponent:
@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g; // A later introduced class that can do more.
g2.draw...
}
Run Code Online (Sandbox Code Playgroud)
JavaFX出现了一个新的播放器,恕我直言,它尚未完全成熟,但可在非生产代码中使用。它支持效果/动画、旋转、变换、灯光。所以2D - 4D渲染,基于类似的平台渲染。而且它是基于属性的,因此复选框不一定绑定到布尔值,而是绑定到观察和通知更改的布尔属性。我还需要一些实践经验,才能用它构想出一个最佳的架构。