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

JAVAawt。Graphics2D repaint()方法

邹英发
2023-03-14

我遇到了两个不同的问题一个是一般的Graphics2D,另一个是具体的repaint()方法。

首先是repaint()问题。我有一个基于用户选择的时间间隔更新的图表,时间间隔可以从1秒到几分钟不等。问题是一旦调用了repaint()方法,它就会在代码的每一次迭代中不断地回忆自己,而不仅仅是在我想要的时候。有人知道为什么会这样吗?如何阻止它?我试着把我的代码放在一个带有标志的if语句中,但是一旦标志为假,PlotUpdate类就再也不会运行了,不管是否有真标志。现在我设置了标志,在某些情况下,在整个代码执行之前“返回”。它阻止了整个代码的执行,但仍然不太理想。

Graphics2D的一般问题是,每当我在我的JPanel上改变一个对象的可见性时,比如一个JButton,我已经重建了两个独立的Graphics2D类,页面上的其他任何东西都不会这样做。如果在进程运行和绘图过程中发生这种情况,它会重建整个图形,并从字面上擦除所有以前绘制的点。我尝试过使用getPaint()和setPaint()方法试图在数据擦除所有内容之前捕获数据,但没有用。

这是一个大型项目的一小部分,因此确切的代码相当复杂,但这里是一个细分。

我有我的主类总是在运行,在那个类中,我声明了一个在用户选择的间隔上调用的PlotUpdate类的实例。

我的主旨

public class Project{
    protected static PlotUpdate plot1;
    
    public static void main (Strings[] args){
        PlotUpdate plot1 = new PlotUpdate();

        if (updateFlag){
            plot1.paintComponent(g);
        }
    }
}

我的PlotUpdate课程的要点是:

if (!Project.updateFlag) // exit strategy to keep the entire code from executing for no reason
    {
     return;
    }
    public class PlotUpdate extends JPanel{
            public void paintComponent(Graphics g);
            Graphics2D g1 = (Graphics2D)g;
            super.paintComponent(g);
            g1.setPaint(new Color(230,0,0));
            g1.draw(new Line2D.Double(x1,y1,x2,y2));
            repaint();
    }

有什么想法吗?任何人

共有1个答案

陆高峰
2023-03-14

快速观察是不要在paintComponent()中重新绘制 它将锁定您的gui。当你有需要重新粉刷的更新项目时,请在别处调用它。不要直接调用paintComponent。始终使用repaint将其放置在EDT上。

另外,如果您有一个要在油漆组件中绘制的图形,它必须被完整地绘制。这是因为super.paint组件(g)将清除先前绘制的对象。

例如

List<Point> points = ... some list of points
for (int i = 0; i < points.size()-1; i++) {
    g1.drawLine(points.getX(i), points.getY(i), points.getX(i+1), points.getY(i+1));
}

每次调用“重新绘制”时,您可能会在中添加一个新点。但每次都必须画出来。

查看Java教程中的2D图形

 类似资料:
  • 我正在尝试为AWT Graphics2D实现类似于SWT GC的xor模式绘图。使用内置XORComposite不是一个选项,因为它不像SWT那样实现xor模式绘图。 SWT xor模式绘图通过二进制异或组合源颜色和目标颜色。AWT XORComposite(可通过)使用恒定的xor颜色,该颜色通过二进制异或与源颜色组合,即目标颜色不影响结果颜色。 所以我唯一的选择就是编写我自己的Composit

  • 我一直得到 完整的堆栈跟踪是: 我已经找到了解决方案,找到了一堆。 无法初始化类网络。旧金山。jasperreports。发动机util。JRStyledTextParser 还有大约10个(这是我的第一个问题,所以我不可能把他们都包括在内)。 我试过: 设置 我在代码内做到了: (按预期返回true)。 我将CATALINA_选项设置为。回响如预期。 这没用。 我试了一下。带有DejaVu SA

  • 我目前正在试验java awt机器人,现在我想尝试在我的游戏窗口中按下一些东西。 为了蒸汽。exe时,我设置了以下属性:“与Windows 7的兼容性”、“始终以管理员身份运行”。 然后,我用这个启动了游戏“反击:全球进攻”。bat文件: 游戏启动了,现在我想用下面的代码点击游戏中的一些东西: 鼠标会转到正确的位置,但当它应该点击某个东西时,游戏不会做出反应或识别它。 然而,如果我不把蒸汽。exe

  • 例如,我如何做到这一点? 和 像这样的东西,我试着在网上搜索,但我找不到任何关于这方面的教程,所以我在这里问。

  • 只是想知道为什么 调用world\u开关: 结果没有任何变化,我想增加或减少实例变量@pos\u X或@pos\u Y 这是我的初始化方法 这就是我如何创建类的实例 我们将不胜感激

  • 本文向大家介绍iOS hitTest方法&pointInside方法相关面试题,主要包含被问及iOS hitTest方法&pointInside方法时的应答技巧和注意事项,需要的朋友参考一下 hitTest方法 当事件传递给控件的时候,就会调用控件的这个方法,去寻找最合适的view point:当前的触摸点,point这个点的坐标系就是方法调用者   pointInside方法 作用:判断当前这个