我的印象是,在JFrame上放置图形需要画布或JPanel,但我之前看到一个视频,其中一个人在扩展JFrame时使用绘画(graphics g),而没有制作面板或画布。如果是这样的话,为什么人们要费心制作画布或JPanel呢?
JFrame
扩展自Frame
,它扩展自窗口
,它扩展自容器
,扩展自定义绘制
的组件
。
如果是这样的话,为什么人们要费心制作画布或JPanel呢?
要回答这个问题,您需要更好地理解JFrame
(以及基于窗口的类)。
JFrame实际上是一个复合组件,也就是说,它由许多其他组件组成,这些组件提供了窗口的核心功能
这意味着,如果覆盖绘制
并在框架上执行自定义绘制,很可能会在子组件上绘制,或者子组件将在其上绘制,并且由于绘制子系统的工作方式,在没有调用框架的绘制方法的情况下,随时都会这样做。
框架包括其可用区域内的窗户装饰。这意味着“可视”区域实际上比框架的定义区域小。
这也是为什么建议使用pack
而不是setSize
这意味着,如果你覆盖paint
,你实际上可以在窗户装饰下画画(是的,这种情况经常发生,我们已经厌倦了回答这个问题)
屏幕截图从我如何设置在中间?
JFrame
的content entPane
处理了这个问题,因为它是在可视区域内布局的。
顶级容器,比如JFrame
不是双缓冲的,因此,即使您克服了上述所有问题,也会得到闪烁的更新。当然,你可以“设计”自己的双缓冲算法,但在Swing(即JPanel
)中,它是免费的,所以何必费心呢
作为一般建议,我们通常不鼓励从JFrame
(或其他顶级容器)扩展,因为它将您锁定在单个用例中,并防止重复使用的可能性。
另一方面,如果您使用JPanel
,您可以将它添加到您想要的任何容器中
在IE9画布中现在是否支持虚线/点线?目前我正在做与以下内容非常相似的事情: 这在IE7、IE8、IE9兼容模式和FireFox中工作很好,然而,在IE9和Chrome中,为每条虚线绘制一个实心笔画。 对为什么会发生这种情况有什么想法吗?
我找到了几个与此相关的问题和答案,但没有一个解决方案让我明白为什么这段代码不起作用: 我有一个tkinter窗口,其中动态生成了内容——这意味着如果屏幕上有两个或多个小部件要显示,则需要能够向下滚动。我希望能够用小部件填充框架“f”,然后使用画布。创建_window()函数以可滚动方式显示它。 现在显示窗口,但滚动条未启用-类似于滚动区域不正确或滚动条与画布之间的链接不正确。
Sketch 里的画布尺寸是无限的。你可以用无限精准的分辨率无关模式来查看画布,或者打开像素模式来查看每一个像素导出后的样子。 如果你想在画布中设置一个固定的边框,你可以直接用画板 (Artboard) 工具创造一个新的画板。 导航 画布中的导航是非常容易的,你可以直接用鼠标滚轮滑动或者电脑的触摸板来控制方向。你还可以按住空格键,来使用抓手工具移动画布。并且,没有任何对象被选中的时候,你可以用方向
createCanvasContext CanvasContext ft.createCanvasContext(string canvasId, Object this) 创建 canvas 的绘图上下文 CanvasContext 对象 参数 string canvasId 要获取上下文的 canvas 组件 canvas-id 属性 Object this 在自定义组件下,当前组件实例的th
CanvasContext jd.createCanvasContext(string canvasId, Object this) 创建 canvas 的绘图上下文 CanvasContext 对象 参数 string canvasId 要获取上下文的 canvas 组件 canvas-id 属性 Object this 在自定义组件下,当前组件实例的this,表示在这个自定义组件下查找拥有 c
属性 类型 默认值 必填 说明 type string 否 指定 canvas 类型,支持 2d,基础库版本1.10.11开始支持2d和webgl canvas-id string 否 canvas 组件的唯一标识符 disableScroll Boolean false 否 当在 canvas 中移动时且有绑定手势事件时,禁止屏幕滚动以及下拉刷新 bindtouchstart 手指触摸动作开始