在Java图形中弹出多条具有固定坐标的线

时间:2014-12-24 22:17:39

标签: java swing graphics

我想存储固定坐标,然后递增坐标,直到它们到达屏幕边缘。 这是我的代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class Name extends JPanel
{
int x, y, w, h, xdir, ydir;


public Name ()
{
}
public void paintComponent (Graphics g)
{
    super.paintComponent (g);

    g.drawLine(110+x, 300+y, 95+x, 400+y);
    g.drawLine(110, 300, 123, 350);
    g.drawLine(135, 300, 123, 350); //M
    g.drawLine(135, 300, 150, 400);


    g.drawOval (150, 300, 15, 15);            // i
    g.fillOval (150, 300, 15, 15);
    g.drawLine (155, 320, 155, 400);
    g.drawLine (172, 300, 172, 400);     // k
    g.drawLine (172, 350, 185, 300);
    g.drawLine (172, 350, 185, 400);

    g.drawLine (190, 360, 265, 360);     // e
    g.drawArc (190, 325, 75, 75, 360, 180);
    g.drawArc (190, 330, 75, 75, 168, 180);
    w = getSize ().width;
    h = getSize ().height;
    xdir = 1;
    ydir = 1;
    x = x + xdir;
    y = y+ ydir;
    if (x > w || x < 0)
    {
        xdir = -1 * xdir;
    }
    if (y > h || y < 0)
    {
        ydir = -1 * ydir;
    }
    repaint ();
    MyLib.delay (25);
} // paint method


public static void main (String[] args)
{
    JFrame frame = new JFrame ("NameBounce");
    frame.getContentPane ().add (new Name ());
    frame.setSize (500, 500);
    frame.setVisible (true);
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
} // main method
} // Name class

我已经尝试将坐标存储到数组列表中,但没有运气。

我一直试图避免对整个程序进行硬编码。

1 个答案:

答案 0 :(得分:2)

使用类似Path2D的内容来定义您想要绘制的形状(您可以在一个Path2D中绘制所有字母)

使用AffineTransform翻译GraphicsGraphics2D#draw的位置,以物理描绘Path2D

使用Swing Timer安排常规回拨,您可以在其中更新Path2D的位置,并在组件上调用repaint以触发更新

了解更多详情

不要在Thread.sleep方法内(或在事件调度线程的上下文中)调用paintComponent或任何其他阻止进程,因为这会阻止EDT更新屏幕。

确保您仅在EDT的上下文中创建/更新您的用户界面,有关详细信息,请参阅Initial Threads