所以现在让我们来解决我的问题.首先,我将解释我想做什么.然后我将解释我的问题.
我试图让两个球在JFrame中同时向不同的方向移动. (基本上我想做类似连锁反应的游戏,当你点击一个装满的盒子时,球会同时向不同的方向移动).
这里我创建两个(截至目前)两个球的JPanels,我试图同时在JFrame上移动.
这是我试过的代码,
public class chainGraphics扩展JPanel实现Runnable {
int oldX,oldY,newX,newY;
int changeX,changeY;
Container myPane;
public chainGraphics(int oldX,int oldY,int newX,int newY,Container myPane) {
// TODO Auto-generated constructor stub
this.myPane=myPane;
this.oldX=oldX;
this.oldY=oldY;
this.newX=newX;
this.newY=newY;
myPane.add(this);
}
public void paintComponent(Graphics g) {
//super.paintComponent(g);
System.out.println("hj");
g.drawOval(changeX,changeY, 40, 40);
}
@Override
public void run() {
System.out.println("hii");
changeX =oldX;
changeY = oldY;
if((newY-oldY)==0){
if(oldXnewX;i--){
changeX=i;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
repaint();
}
}
}
if((newX-oldX)==0){
if(oldYnewY;i--){
changeY=i;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
repaint();
}
}
}
}
public static void main(String[] args) {
JFrame gui = new JFrame();
gui.setTitle("Chain Reaction ;-) ");
gui.setSize(650,650);
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.setLocationRelativeTo(null);
gui.setVisible(true);
Container Pane = gui.getContentPane();
chainGraphics g = new chainGraphics(100,200,300,200,Pane);
chainGraphics g1 = new chainGraphics(200,100,200,300,Pane);
Thread t1 = new Thread(g);
t1.start();
Thread t2 = new Thread(g1);
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
在这里,我看不到两个球同时移动.我猜有一个问题.
我能够看到球只沿y方向移动. (但我希望两个球同时移动,因为我创造了两个线程)
我还注意到我先创建g1对象然后再创建g对象,
然后球只沿x方向移动.
我认为Jframe只允许一次使用1个JPanel. (我将JPanel添加到Frame彻底的构造函数中).因此,最后将JPanel添加到框架中,它允许对其进行处理.是这样吗 ?
如果我现在该怎么办.我的要求是我想在不同方向同时移动球.
谢谢.
本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/java-zaiyigejframezhongtongshichulilianggejpanel.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:9 月 26, 2019 at 07:12 下午