java – JFrame如何工作?在内心深处,它如何绘制东西?

通常,当我创建一个类,例如Customer时,我给它一些数据字段,即public int IdNumber;和一些方法,即public String getName(){…}.但这就是它.我不能超越它并开始玩图形 – 我只能操纵和组织数据,只要类允许.

我无法理解JFrame中发生的事情.谁写了JFrame类,他们是怎么写一个可以让一个盒子出现在屏幕上的类?内部会发生什么导致这种情况发生?无论如何都要模仿它吗?

同样的问题适用于所有基于图形的Java类.我真的很想知道它是如何工作的,因为每次我使用其中一个都会困扰我.

解决方法

Java以awt(Abstract Windowing Toolkit)开始,后来引入了swing.

在AWT中,平台事件处理循环被挂钩,事件被打包在自己的java类中,一个(非并行)事件处理队列/线程一个一个地处理它们. Swing继承了这一点.

在AWT中,每个GUI组件(如单选按钮或菜单项)都具有本机代码“对等”控件,即平台提供的组件.有一组并行的java类和它们的C对应物.特别有趣的是java Graphics类,它允许自定义绘制线条,矩形等.据推测,它在Windows下与CDC(设备上下文)对等.

在Swing中,大多数平台组件都是模拟的,即自己重新创建:绘图,鼠标处理等.所以原生部分更简单,比如可能是带有自定义绘图的CWnd(Window组件).

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...
}

有了JavaFX,就会出现一个新的播放器,即恕​​我直言,尚未完全成熟,但可用于非生产代码.它可以实现效果/动画,旋转,变换,光.所以2D-4D渲染,基于类似平台渲染.它也是基于属性的,因此复选框不一定会绑定到布尔值,而是一个布尔属性,用于观察和通知更改.我还需要一些实践经验,用它构思一个最佳的架构.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...