我有很多在窗口中移動的平面(線程),我希望根據平面的方向切換ImageIcon。 例如:如果一個平面向右移動,那麼該平面的imageIcon是正確的,然後平面向左移動,交換平面的imageIcon被留下。 如何在paintComponent方法中做到這一點? 對不起,我的英語不好。在java中切換imageIcon?
1
A
回答
3
如果您正在討論交換由JLabel顯示的ImageIcon,那麼您不應該在paintComponent中切換ImageIcons,而應該在代碼的非paintComponent區域(可能在Swing Timer中)執行此操作。即使你不是在討論JLabel,也不應該使用paintComponent方法來改變對象的狀態。
然而,你的問題留下了太多的不足以讓我們能夠完全和好地回答它。考慮告訴和展示更多。
2
在設置方向你也應該設置圖像圖標,或者有一個getImageIcon(direction)
。
在paintComponent沒有重邏輯應該發生;它應該儘可能快。 paintComponent被調用的時間和頻率沒有(全部)控制。
3
如果您正在尋找邏輯thingy,那麼一個小例子就在這裏,但您可能需要修改它以滿足您的需求。
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);
}
}
圖像中使用:
+0
請仔細閱讀如何[手動添加圖片到您的項目](http://stackoverflow.com/a/11372350/1057230)或此[線程](http://stackoverflow.com/a/9866659/1057230) –
相關問題
- 1. Java ImageIcon大小
- 2. 替換imageIcon
- 3. 在Java Applcation中切換Windows
- 4. 在Java中切換非Ints
- 5. 在Java中切換循環
- 6. Java:字符串ImageIcon?
- 7. java imageicon和框架
- 8. 在Java網格中更改ImageIcon
- 9. 如何在Java中存儲ImageIcon
- 10. Java- CardLayout如何從正在切換的卡中切換卡片
- 11. Java Swing - JScrollPane中的Jtable中的ImageIcon
- 12. Java ImageIcon動畫閃爍
- 13. java rmi傳遞ImageIcon對象
- 14. Java ImageIcon不起作用
- 15. Java將ImageIcon添加到JLabel
- 16. Java ImageIcon到JLabel數組
- 17. ImageIcon更新爲Hangman GUI Java
- 18. 爲ImageIcon添加路徑 - Java
- 19. 文件[]數組imageicon java
- 20. Java - 刪除一個ImageIcon?
- 21. 在java中使用selenium切換窗口
- 22. 在Java遊戲中切換玩家
- 23. 在Java中使用enum切換語句
- 24. 在Java swing中切換屏幕
- 25. 在Java中的OutputStream上切換Writer
- 26. 如何在WindowBuilder中切換面板(Java)
- 27. 在java swing中切換/導航jpanels
- 28. 從Object [] []轉換爲ImageIcon
- 29. 將ImageIcon轉換爲BufferedImage
- 30. Android將ImageIcon轉換爲Drawable
見[翻轉圖像水平地(http://stackoverflow.com/questions/13742365/how-do-i-flip-an- image-horizontal-flip-with-glreadpixels-bufferedimage-and-o/13756357#13756357)爲它的一部分。但是在啓動時,而不是在'paintComponent(..)'中。你有什麼問題? –