源码

java – 在一个JFrame中同时处理两个JPanel


我是java swing的新手.在尝试使用图形时,我会遇到这种情况.
我无法在网络上找到合适的解决方案.所以我想发布在这里.

所以现在让我们来解决我的问题.首先,我将解释我想做什么.然后我将解释我的问题.

我试图让两个球在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添加到框架中,它允许对其进行处理.是这样吗 ?
如果我现在该怎么办.我的要求是我想在不同方向同时移动球.
谢谢.

(0)

本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/java-zaiyigejframezhongtongshichulilianggejpanel.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:9 月 26, 2019 at 07:12 下午

热评文章