2
A
回答
1
1
什么是拖动多个图像的最佳方法?我已经使用Java2D将两个图像绘制到JPanel,但我只能拖动它们中的一个。我会附上我的源代码。我的解决方案的问题是我需要重新绘制整个窗口,即使我只是操纵一个元素。是否可以处理卡片的对象,而不是它们的图像?所以,当我移动一卡,我会移动对象的视觉呈现,而不是像(像现在这样)。
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.image.BufferedImage;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Java2d_MainPanel extends JPanel{
private static BufferedImage img = new logic.GetBufferedImage().getImage();
private JButton knapp = new JButton("Nytt bilde");
private JButton knapp2 = new JButton("Nytt bilde2");
private static BufferedImage img2 = new logic.GetBufferedImage().getImage2();
//coordinates for image 1
private int x1 = 0;
private int y1 = 0;
//coordinates for image 2
private int x2 = 50;
private int y2 = 50;
public Java2d_MainPanel(){
add(knapp);
add(knapp2);
knapp.addActionListener(new ButtonHandler());
knapp2.addActionListener(new ButtonHandler2());
addMouseMotionListener(new MouseMotionHandler());
}
public void newImage(ActionEvent e){
if(e.getSource().equals(knapp)){
img = new logic.GetBufferedImage().getImage();
repaint();
}
else if(e.getSource().equals(knapp2)){
img2 = new logic.GetBufferedImage().getImage2();
repaint();
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
newPaint(g2d);
}
public void newPaint(Graphics2D g2d){
g2d.drawImage(img, x1, y1, null);
g2d.drawImage(img2, x2, y2,null);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Rabbits");
frame.add(new Java2d_MainPanel());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 640);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
class MouseMotionHandler extends MouseMotionAdapter {
@Override
public void mouseDragged(MouseEvent e) {
x1 = e.getX()-(img.getWidth()/2);
y1 = e.getY()-(img.getHeight()/2);
repaint();
}
}
class ButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e) {
newImage(e);
}
}
class ButtonHandler2 implements ActionListener{
public void actionPerformed(ActionEvent e) {
newImage(e);
}
}
}
相关问题
- 1. 创建标准纸牌游戏(iPhone SDK)
- 2. HTML5纸牌游戏
- 3. Java中的纸牌游戏问题
- 4. Java多人纸牌游戏AI集成
- 5. Java程序 - 纸牌游戏战争
- 6. 纸牌游戏设计
- 7. c#,代表,纸牌游戏
- 8. C,纸牌游戏WAR
- 9. 创建简单游戏的提示.net
- 10. 更新纸牌游戏的分数
- 11. 开发Android的在线纸牌游戏
- 12. 简单的python纸牌游戏
- 13. 如何填充,洗牌,处理纸牌游戏
- 14. 岩纸剪刀Java游戏
- 15. Java:在线纸牌游戏库/类/例如
- 16. 纸牌游戏计划:设计
- 17. 哪个环境适合纸牌游戏?
- 18. 纸牌游戏玩家类OOP设计
- 19. Django战略纸牌游戏结构
- 20. Rails两名玩家纸牌游戏
- 21. 在线纸牌游戏+与PHP聊天
- 22. Java Swing纸牌游戏中的视觉反馈
- 23. Java - 创建双人游戏
- 24. 如何创建FPS游戏?
- 25. 用python实现纸牌游戏套牌的最佳方式
- 26. 寻求建议多人纸牌游戏(安卓)
- 27. 如何使用互联网纸牌游戏.net
- 28. 机器学习:如何学习MTG草稿纸牌游戏
- 29. MySQL的RAND()足够用于纸牌游戏的“洗牌”牌套牌吗?
- 30. 游戏不结束在java岩石纸剪刀游戏
提示 - 如果你打你的卡,你会发现,有人已经为你实现了这一点:-) – 2010-04-07 07:42:46
我从堆栈中绘制一张卡片,它是... CardLayout,omg有多么伟大=) – jonas 2010-04-07 08:01:12
在Java中创建纸牌游戏的最佳方式可能是*不*尝试使所有内容摇摆。相反:尽可能少地使用Swing。一个JFrame,一个JLabel,它的ImageIcon是一个BufferedImage,你很好走。 Java游戏程序员通常不会**使用Swing:我了解Java 3D游戏,了解Java手机游戏,了解Java 2D游戏......但我不介绍Java Swing游戏;) – SyntaxT3rr0r 2010-04-07 08:14:00