当前位置: 首页 > 知识库问答 >
问题:

如何在Java中创建一个绘制到屏幕的新线程?

佴阳曦
2023-03-14

我必须创建一个新的类来创建一个全新的PaintComponent()吗?或者我会简单地创建一个新的Graphics2D对象,这样我就可以使用不同的字体、颜色等等?我想最让我困惑的是我不能调用不同的draw方法,因为我仍然需要传递g2d作为参数。因此,在我看来,我需要从另一个已经有g2d对象的方法中创建线程。

如果这让我感到困惑,我很抱歉,因为我仍然是Java的初学者。如果你需要更多的信息,尽管告诉我。提前谢谢你。

 public abstract void draw(Graphics2D g2d);



@Override

public void paintComponent(Graphics g)
{
Graphics2D g2d = (Graphics2D)g;

super.paintComponent(g2d);

draw(g2d);
} 

共有1个答案

霍浩皛
2023-03-14

首先,Swing本质上是单线程的。这曾被总结在“单线程规则”中

一旦实现了Swing组件,所有可能影响或依赖于该组件状态的代码都应该在事件调度线程中执行。

(不幸的是,在Java从Sun迁移到Oracle之后,相应的站点没有幸存下来,但是可以在http://docs.Oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html或在进行“swing single thread rule”的web搜索时找到一些信息)

 类似资料:
  • 现在,我正在使用CustomView在画布上绘制,我需要将画布(可能作为位图)保存到FileOutputStream中,然后移动到另一个具有相同功能的CustomView。 我不确定我是否应该使用不同的方法来实现它,但是我正在做的任何事情都在我调用start Active(i)时崩溃。 我的理解是,我的CustomView是用onTouch()绘制的,它绘制到路径对象上,然后调用onDraw(ca

  • 我想做的是让POPOVER的左上角与父视图的左上角相等,我试过这样的操作: 然而,结果是这样的:截图看起来像是iOS添加了一些偏移量到popover 我还尝试将modalPresentationStyle更改为overCurrentContext,但它变成了fullscreen。有没有办法使用当前的ViewController来做到这一点?(而不是手动将子视图添加到该位置)

  • 我想重新绘制我的屏幕。到目前为止,它所做的只是在第一个屏幕上的头部应该在的地方显示一个点。这很好,但是我在代码中写了我想每秒将头部向下移动10个像素。我正在打印头部应该在的位置,在命令提示符中它显示y值确实在增加。但是在我的屏幕上,头部没有移动。 我尝试过使用revalidate方法,尝试扩展canvas类而不是jframe,我尝试过只为paint方法使用不同的类,我尝试过用paintCompon

  • 问题内容: 我是线程新手。我想创建一些与主线程分开工作的简单函数。但这似乎不起作用。我只想创建一个新线程,并在那里独立于主线程发生的事情做一些事情。这段代码看起来很怪异,但到目前为止,我对线程的了解还很少。你能解释一下这是怎么回事吗? 问题答案: 您正在线程方法中调用该方法。但是只有在线程已经启动时才调用该方法。改为这样做:

  • 问题内容: 如何从一个活动屏幕导航到另一个活动屏幕?在第一个屏幕中,我有一个按钮,如果我单击该按钮,则必须移至另一个“活动”屏幕。 问题答案:

  • 问题内容: 我正在尝试将十六进制值转换为int,以便创建新的可绘制颜色。我不确定是否可以,但是根据文档,应该可以。它明确地要求 公共ColorDrawable(int颜色) 在API级别1中添加。创建具有指定颜色的新ColorDrawable。 参数 color 绘制的颜色。 因此,我的代码无法正常工作,因为我收到一个无效的int:“ FF6666”错误。有任何想法吗? 问题答案: 因为您在谈论十