我想存储固定坐标,然后递增坐标,直到它们到达屏幕边缘。 这是我的代码:
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
我已经尝试将坐标存储到数组列表中,但没有运气。
我一直试图避免对整个程序进行硬编码。
答案 0 :(得分:2)
使用类似Path2D
的内容来定义您想要绘制的形状(您可以在一个Path2D
中绘制所有字母)
使用AffineTransform
翻译Graphics
和Graphics2D#draw
的位置,以物理描绘Path2D
使用Swing Timer
安排常规回拨,您可以在其中更新Path2D
的位置,并在组件上调用repaint
以触发更新
见
了解更多详情
不要在Thread.sleep
方法内(或在事件调度线程的上下文中)调用paintComponent
或任何其他阻止进程,因为这会阻止EDT更新屏幕。
确保您仅在EDT的上下文中创建/更新您的用户界面,有关详细信息,请参阅Initial Threads