gpt4 book ai didi

java - 运行时在面板上绘制

转载 作者:行者123 更新时间:2023-12-02 07:33:41 25 4
gpt4 key购买 nike

我有一个面板,我想在上面画东西。当它被创建时在它上面绘画是没有问题的。

canvas = new Panel() {
public void paint(Graphics g) {
g.setColor(Color.WHITE);
g.drawLine(0, 0, 10, 10);
}
};

但是我想在运行时利用它。出于本能,我创建了这样的东西:

Graphics g = canvas.getGraphics();
g.setColor(Color.GREEN);
g.drawLine(10, 10, 20, 20);
canvas.paint(g);

遗憾的是,这不起作用。这可能是一个简单的问题,但我通过搜索找不到满意的结果。那么我怎样才能做我想做的事呢?

<小时/>

很抱歉提出上述问题。我刚刚在按钮单击事件上添加了绘制代码,并且它可以工作。它只是对父框架的 windowOpened 事件不起作用。有什么想法吗?

最佳答案

问题是只要窗口系统(或操作系统)决定需要在屏幕上重新绘制特定的图形组件,就可以随时调用paint()方法。这可能随时发生(最常见的是调整大小、移动、切换窗口等时)。要查看它发生的频率,只需在 Paint() 方法的开头添加一条日志消息。如果您只在 Canvas 上绘制某样东西一次,则很可能它已被绘制,但随后另一个重绘请求来自操作系统/窗口系统,并且您的绿线被对象的paint()“ overdraw ”。所以答案是任何自定义绘画都应该在paint()中完成。您可以向子类添加额外的属性(例如 boolean 值drawGreenLine),在paint()中检查它并采取任何适当的操作,例如:

class MyPanel extends JPanel {

boolean drawGreenLine;

protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.WHITE);
g.drawLine(0, 0, 10, 10);
if (drawGreenLine) {
g.setColor(Color.GREEN);
g.drawLine(10, 10, 20, 20);

}
}
};

编辑:根据@MadProgrammer的建议,该示例已更改为覆盖paintComponent()。这样组件只负责绘制自身(而不是任何子组件或边框)。

关于java - 运行时在面板上绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12562614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com