问题标签 [custom-painting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
21079 浏览

java - 在 JFrame 上的 JPanel 上绘制 Java

嗨,我有一个 JFrame,上面有两个 JPanel。我的目的是利用 JPanel。任何人都可以分享任何Java代码吗?

0 投票
0 回答
5811 浏览

c# - C#:可滚动面板上的自定义绘画滚动

有人可以提供一个关于如何在可滚动面板中自定义绘制滚动条的示例吗?

提前致谢。

0 投票
5 回答
7086 浏览

java - JPanel 何时绘制(或重绘)其子组件?

我有一个使用自定义 UI 委托(CustomButtonUI 扩展 BasicButtonUI)绘制的 JButton。CustomButtonUI 的paint() 方法绘制带有“抗锯齿”圆角的按钮,以使外观尽可能“平滑”。

每次我将鼠标拖到按钮上时,按钮的“抗锯齿”边缘都会以某种方式消失。这使按钮边缘看起来“像素化”。但是,一旦我添加了一行代码来重新绘制按钮的父级,即使我将鼠标拖到按钮上,抗锯齿也会启动。

现在,我的问题与这是否是个好主意有关?毕竟,我会从子组件重新绘制父组件。我想知道这是否会导致重绘循环?如果父母试图重绘它的孩子,而孩子试图重绘它的父母——那么我假设我们正在谈论一个循环。

我已附上我的代码作为参考。任何意见都非常欢迎!

更新 1

只是为了说明别名和抗锯齿边框,请看下面的两张图片。当我(来自 ButtonUI 的 paint() 方法)手动调用父 JPanel 的 repaint 方法时,所有边框都始终完美抗锯齿。但是,当我不手动调用父 JPanel 的 repaint 方法时,一旦我将鼠标悬停在按钮上,边框将不再抗锯齿。

别名 抗锯齿

更新 2

我在 Snipt 上共享了由一个 JPanel、一个 JSlider 和几个 JButton 组成的整个“组件”。请从http://snipt.org/wnllg获取。

更新 3

看来我已经设法让它工作了。我没有在其paintComponent() 方法中绘制JPanel 的背景,而是创建了一个安装在JPanel 上的JCustomPanelUI。我不认为这就是解决方案本身,但我没有使用 Graphics 实例的宽度和高度,而是尝试使用 JPanel 本身的宽度和高度。当我使用 Graphics 实例的宽度和高度时,我不太确定为什么会出错。我认为 Graphics 实例的宽度和高度已经针对 JPanel 组件的尺寸进行了“准备”。您可以在这里查看最终组件:http: //snipt.org/wnlli

0 投票
1 回答
947 浏览

java - java.awt.Graphics.fillRect() 行为不端

下面我有一个简单的方法来将一组对象绘制到java.awt.applet.Applet. 我认为这非常简单,但最终只是将对象绘制为小程序左上角的单个像素。这个想法是 Display 类接受一组相当轻量级的对象,这些对象扩展GameObject并包含有关它们在屏幕上的位置、大小和外观的信息,然后将它们逐个像素地绘制到小程序上,按比例拉伸和定位它们取决于指定的显示高度和宽度。在测试这个时,我将 的宽度和高度设置Display为 128,并将两个对象传递给Display,它们都是 32 像素的正方形(都返回32getWidth()getHeight(),一个是红色的,24返回getX()getY(), 另一个是蓝色并16返回getX()getY()。我将Displaya放入javax.swing.JFrame并使用 ajava.awt.BorderLayout以确保它填充框架(我add(display, java.awt.BorderLayout.CENTER);在上述 中使用javax.swing.JFrame)。

据我所知,这应该是绘制一个距离顶部和左侧边缘 16 像素的蓝色 32 像素正方形和一个被另一个遮挡或遮挡一部分的红色 32 像素正方形。但是,我得到的只是Display. 无论窗口有多大或多小,这都是一致的。

代码


 

问题


为什么java.awt.Graphics.fillRect(int x, int y, int width, int height)只画小程序的左上角?

解决方案


解决方案在于读取的行

其中整数计算导致所有值都为0。解决方案如下:

0 投票
1 回答
661 浏览

qt - QGraphicsRectItem 上的drawForeground

我需要一种方法QGraphicsRectItem来绘制它的孩子。我有一个包含几个子项目的项目。在特定高度,我需要在子项目上画一条线。

有没有办法实现 a drawForegroundinQGraphicsItems类似于drawForegroundin QGraphicsScene

如果可能的话,我宁愿不必为每个子项目画线。

0 投票
2 回答
413 浏览

java - 如何去除自定义按钮边框上的“妊娠纹”?

在按钮Graphics2D对象上执行一些自定义绘画时,我得到以下结果:

在此处输入图像描述

最左边的按钮未切换,另一个按钮已切换。如您所见,切换按钮有这些白色的“妊娠纹”。为什么这些在那里,我如何删除它们?

这是我用来绘制边框的代码:

0 投票
1 回答
338 浏览

java - 将 path2d 添加到 jpanel

我对这个非常微不足道的事情有很多问题。我想获取一个 path2d 对象并将其添加到 jpanel 并在我的 gui 中显示它。我能得到一些关于我做错了什么的指导吗?我在这里和谷歌使用了搜索,找不到任何有用的东西,所以如果之前有人问过这个问题,请原谅我。

伪代码:传入的面板是根面板

我可能对正在发生的事情有一个非常糟糕的基本误解。一点指导真的很有帮助。谢谢

0 投票
1 回答
2158 浏览

java - 如何有效地将自定义 JPanel 绘制为 JScrollPane 的 ViewportView?

我有一个JScrollPane显示(作为它的视口视图)MyPanel,一个JPanel.

MyPanel通过重载实现自定义绘画paintComponent。的可显示内容的总大小MyPanel通常很宽(意味着比JScrollPane视口的大小宽 50 倍到 200 倍)并且使用Timer,我水平滚动以查看底层的不同部分MyPanel。我还允许使用滚动条拇指手动寻找MyPanel.

在我的paintComponent实现中,我目前正在MyPanel使用 查找当前在视口中可见的部分JViewport#getVisibleRect,并且每次更改视口位置时只需绘制该部分。

这很好用——但我最终会MyPanel一遍又一遍地重新绘制可见部分的很大一部分,因为定时滚动一次只会将视口移动 1/50 的视口宽度。此外,我通常最终会滚动浏览 的整个水平范围MyPanel,因此无论如何我都必须至少绘制一次。

这让我想到MyPanel只绘制一次的全部内容(到一个BufferedImage?),然后让JScrollPane(或JViewport)处理剪辑和只对BufferedImage.

直觉上,在我看来,这似乎是处理这个问题的最有效方式,而且是相对常见的。

当我研究 Swing 教程和其他资源时,我了解到 Swing 已经是双缓冲的。如果我尝试用我自己的蛮力来强制执行此操作,而不依赖于 Swing 功能,听起来我最终会使用三重缓冲。

我还没有找到JScrollPane为我做这件事的方法(如果存在的话)。

是否有可用的示例或有关如何执行此操作的某些方向(如果可能)?

0 投票
2 回答
1296 浏览

java - 为什么在 JFrame 上绘图比在 JPanel 上慢得多?

我的问题是,为什么在 JPanel 上绘图时,与直接在 JFrame 上相比,相同的摆动自定义绘图程序快近 16 倍?它只是双缓冲吗?不可能吧?

背景:当 JFrame 未被遮挡(尤其是仅被部分遮挡)时,我遇到了自定义绘制未刷新的问题。在搜索了 SO 之后,我决定硬着头皮弄清楚如何将 JPanel 的子类连接到一个 bluddy-NetBeans-form-designer 表单中。

对于处于相同情况的任何人:在 NetBeans 中,您需要创建一个恰好扩展 JPanel 的新标准类(不是 JPanel 表单),并手动编码其中的所有内容(没有 GUI 设计器,如过去的美好时光,叹)。然后在表单中添加一个标准的 JPanel,设置它的大小;然后右键单击并选择“自定义代码”并在组合框中选择“自定义创建”......它会创建一个新的 javax.swing.JPanel 替换您的子类。

所以......这让我能够“正确地做”并在组件上绘画,而不是直接在表单上。此外,panels-key-listener 是一个比劫持帧 key-event-dispatcher 更简洁的解决方案。

无论如何,现在分析器说完全相同的自定义绘画代码在 JPanel 的 paintComponent() 中的执行速度几乎是 JFrame 的 paint() 的 16 倍......我想知道是否有人可以解释原因。

先感谢您。基思。


编辑:这个问题是基于被误解的指标。分析器不包括/报告 AWT-EventQueue 线程中的 JPanel 的 paintComponent() 方法,因为我的基线配置文件确实包括 JFrame 的 paint()。在问一个愚蠢的问题之前,我应该更仔细地看一下。我的错。

0 投票
4 回答
99 浏览

java - 绘制太快时未连接的椭圆

我正在编写必须绘制平滑连接线的 Applet,我正在使用这条线(用户正在输入笔的宽度)

其中 g = this.getGraphics();

当我画得有点慢时它很好,但是当我画得更快时,单个椭圆会显示出来,有没有什么方法可以让这个椭圆形?

图片:http: //i42.tinypic.com/1536x04.png