如何在另一种方法中使用图形对象来重叠Java中的绘图?

时间:2015-12-08 14:09:26

标签: java swing shapes

我是一名学徒软件开发人员。我目前正在学习Java,我想创建一个基本的滴答时钟。我通过修补和搜索来完成了很多代码,但是,我不明白我将如何替换秒针并绘制一个新的代码。我试图在这里做到:

t = new Timer(1000, timer);
    t.setRepeats(true);
    t.start();
}

ActionListener timer = new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {

        x= 253;
        y = 150;
            x=x+12;
            y=y+12;
            System.out.println(x);
            System.out.println(y);
            ga.drawLine(250, 275, x, y);
            repaint();
        }

我通过使用Swing计时器和paintComponent方法完成了这项工作。但是,图形对象' ga'这里没有从绘图组件中读取相同的内容,并且不会在主时钟上绘制/重叠。这应该是简单的,因为任何大的东西都会让我感到困惑,因为我已经看到很多在线时钟都有很长的代码。我只想让手勾手。

对此的任何帮助将不胜感激!

提前致谢

1 个答案:

答案 0 :(得分:3)

这是解决问题的错误方法。您需要让Swing组件担心何时重绘自己。正确的解决方案是覆盖您正在绘制的组件中的paintComponent(Graphics),并让它在每个步骤上绘制完整的时钟。然后,在您的计时器中,您应该更新对象中的一个变量,该变量显示将要绘制秒针的位置,并在顶层框架上调用repaint()

因此,您的计时器代码将更改为以下内容:

@Override
public void actionPerformed(ActionEvent e) {
    int x = codeToGetXPosition();
    int y = codeToGetYPosition();
    myPanel.x = x;
    myPanel.y = y;
    repaint();
}

您的paintComponent方法看起来像这样:

@Override
public void paintComponent(Graphics g){
    super.paintComponent(g);
    //Code to draw the rest of your clock
    g.drawLine(250, 275, x, y);
}

只要需要重新绘制组件(例如,组件调整大小时),就会调用该方法,因此应确保始终在正确的位置绘制完整的时钟。