- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
通常,当我创建一个类时,例如 Customer
,我会给它一些数据字段,即 public int IdNumber;
和一些方法,即 public字符串 getName(){...}
。但仅此而已。我无法超越并开始玩弄图形 - 我只能在类(class)允许的范围内操作和组织数据。
我无法理解 JFrame 内部发生的事情。谁编写了 JFrame 类,他们是如何编写一个可以使框出现在屏幕上的类的?内部发生了什么导致这种情况发生?有什么办法可以模仿吗?
同样的问题适用于所有基于图形的 Java 类。我真的很想知道它是如何工作的,因为每次我使用其中一个时都会困扰我。
最佳答案
Java 始于 awt(抽象窗口工具包),后来引入了 swing。
在 AWT 中,平台事件处理循环被 Hook ,事件被打包在自己的 java 类中,一个单一的(非并行的)事件处理队列/线程一个接一个地处理它们。 Swing 继承了这一点。
在 AWT 中,每个 GUI 组件(如单选按钮或菜单项)都有一个 native 代码“对等”控件,即平台提供的组件。有一组并行的 Java 类及其对应的 C。特别有趣的是 java Graphics 类,它允许自定义绘制线条、矩形等。它在 Windows 下与 CDC(设备上下文)对等 - 大概。
在 Swing 中,大多数平台组件都是模拟的,即自己重新创建:绘图、鼠标处理等。所以 native 部分更简单,比如一个带有自定义绘图的 CWnd(Window 组件)。
Swing 可以实现更一致和更丰富的功能。您可以想象在 AWT 单选按钮上设置背景颜色可能是不可能的,或者在标签或工具提示上使用 HTML。 Swing 还可以进行蒙皮、主题、LookAndFeels。 系统 的外观和感觉是对平台组件的高度模仿。 尤其是 Swing 组件更轻量级,因为并非每个组件都有要在 C 中处理的 native 对等控件。
现在的SWT是IBM后来在eclipse中实现的对AWT的重新加载的倡议。不像 Swing 那样可定制,但旨在靠近平台。
你应该忘记使用 AWT 组件,如果不为 eclipse RCP 编程也不要使用 SWT。
因此: 鼠标点击、重绘请求等全局平台事件被转换为 Java 事件。有一个 JFrame、JPanels、JScrollPanes、JComponents 的容器层次结构。事件被分派(dispatch)到处理组件,例如调用 paintComponent:
@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g; // A later introduced class that can do more.
g2.draw...
}
随着 JavaFX 出现了一个新播放器,恕我直言,它尚未完全成熟,但可用于非生产代码。它启用效果/动画、旋转、变换、光。所以一个 2D - 4D 渲染,基于像平台渲染。它也是基于属性的,因此复选框不一定绑定(bind)到 boolean 值,而是观察和通知更改的 boolean 值属性。 我还需要一些实践经验,才能用它构思出最佳架构。
关于java - JFrame 是如何工作的?在内心深处,它是如何画东西的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16440713/
我想以 headless 模式(屏幕上根本没有 GUI)将 JPanel 绘制到 BufferedImage 中。 final JPanel panel = createPanel(); panel.
我是 Canvas 的新手,正在尝试创建看起来逼真的 float 粒子动画。 目前,我正在创建 400 个随机散布在 400x400 Canvas 上的粒子。 然后,在每个 requestAnimat
有没有办法在悬停时停止悬 float 画? :hover 这是一个显示动画的链接: https://codepen.io/youbiteme/pen/RprPrN 最佳答案 只需为您的 svg 悬停添
我想在谷歌地图上绘制覆盖图,其中除了特定点周围 1.5 公里半径以外的所有内容都被遮蔽了。为此,我尝试使用带有大量边框的圆圈,所以我会在边框中放置透明中心和覆盖颜色来实现这一点,但它无法渲染。
我正在尝试通过扩展类 UIView 来创建自定义 View ,该类可以在自定义 View 的中心显示一个圆圈。为了添加自定义绘图,我重写了 draw(_ rect: CGRect) 方法,如下所示。
我是一名优秀的程序员,十分优秀!