我有很多面(线程),在窗口移动,我要根据平面的方向切换的ImageIcon。 例如:如果一个平面转到正确的,飞机的ImageIcon的是正确的,那么飞机转到左边,换取平面的ImageIcon留下。 我如何能做到这一点的方法的paintComponent? 对不起,我的英语不好。
Answer 1:
如果你在谈论交换由一个JLabel显示ImageIcon的,那么你不应该转ImageIcons中的paintComponent而是应该这样做在代码的非的paintComponent区域,也许在一个Swing计时器。 即使你不是在谈论一个JLabel,不应该被用于改变对象的状态的paintComponent方法。
但是你的问题留下太多没说让我们能够完全和好回答。 考虑告知和显示更多。
Answer 2:
如果你正在寻找一个逻辑啄,然后一个小例子是在这里,虽然你可能需要修改它为您的需求。
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.swing.*;
public class FlyingAeroplane
{
private Animation animation;
private Timer timer;
private ActionListener timerAction = new ActionListener()
{
@Override
public void actionPerformed(ActionEvent ae)
{
animation.setValues();
}
};
private void displayGUI()
{
JFrame frame = new JFrame("Aeroplane Flying");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
animation = new Animation();
frame.setContentPane(animation);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
timer = new Timer(100, timerAction);
timer.start();
}
public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
new FlyingAeroplane().displayGUI();
}
});
}
}
class Animation extends JPanel
{
private final int HEIGHT = 150;
private final int WIDTH = 200;
private int x;
private int y;
private ImageIcon image;
private boolean flag;
private Random random;
public Animation()
{
x = 0;
y = 0;
image = new ImageIcon(getClass().getResource("/image/aeroplaneright.jpeg"));
flag = true;
random = new Random();
}
public void setValues()
{
x = getXOfImage();
y = random.nextInt(70);
repaint();
}
private int getXOfImage()
{
if (flag)
{
if ((x + image.getIconWidth()) == WIDTH)
{
flag = false;
x--;
return x;
}
x++;
image = new ImageIcon(getClass().getResource("/image/aeroplaneright.jpeg"));
}
else if (!flag)
{
if (x == 0)
{
flag = true;
x++;
return x;
}
x--;
image = new ImageIcon(getClass().getResource("/image/aeroplaneleft.jpeg"));
}
return x;
}
@Override
public Dimension getPreferredSize()
{
return (new Dimension(WIDTH, HEIGHT));
}
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(image.getImage(), x, y, this);
}
}
图像中使用:
Answer 3:
在设定的方向,你应该设置图像图标太多,或有getImageIcon(direction)
。
在没有的paintComponent重逻辑应该发生; 它应该是尽可能快。 你有时间和频率的paintComponent被称为无(总)控制。
文章来源: Switch imageIcon in java?