Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将JPanel转换为弹跳球的JFrame?_Java_Swing_Jframe_Jpanel_Paint - Fatal编程技术网

Java 如何将JPanel转换为弹跳球的JFrame?

Java 如何将JPanel转换为弹跳球的JFrame?,java,swing,jframe,jpanel,paint,Java,Swing,Jframe,Jpanel,Paint,我从其他地方获得了一个关于弹跳球的Java Swing代码。代码使用一个类“Ball”,它扩展了JPanel 有人能帮我将此代码转换为extensedJFrame。 我想这样做,以便能够从另一个框架类调用它。 代码如下: public class Ball extends JPanel{ int x=0, y=0; int angleX = 1, angleY = 1; public void move(){ if (x + angleX <0)

我从其他地方获得了一个关于弹跳球的Java Swing代码。代码使用一个类“Ball”,它扩展了
JPanel

有人能帮我将此代码转换为extensed
JFrame

我想这样做,以便能够从另一个框架类调用它。 代码如下:

public class Ball extends JPanel{ 
    int x=0, y=0;
    int angleX = 1, angleY = 1;

    public void move(){
        if (x + angleX <0) {
            angleX =1;
        } else if (x + angleX >getWidth()-50){
            angleX =-1;
        } else if (y + angleY <0) {
            angleY =1;
        } else if (y + angleY >getHeight()-50){
            angleY =-1;
        }
        x = x + angleX;
        y = y + angleY;
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.fillOval(x, y, 50, 50);
    }

    public static void main(String[] args){
        JFrame jfrm= new JFrame("BounceBall");
        jfrm.setSize(400,400);
        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jfrm.setVisible(true); 

        Ball bl = new Ball();
        Component add = jfrm.add(bl);

        while (true){
            bl.move();
            bl.repaint();
            try{
               Thread.sleep(10);
            }catch(InterruptedException e){   
            }
        }
    }
}
public类Ball扩展了JPanel{
int x=0,y=0;
int angleX=1,angleY=1;
公开作废动议(){
如果(x+angleX getWidth()-50){
角x=-1;
}否则,如果(y+angleY getHeight()-50){
角度=-1;
}
x=x+角度x;
y=y+角度;
}
@凌驾
公共空间涂料(图g){
超级油漆(g);
g、 椭圆形(x,y,50,50);
}
公共静态void main(字符串[]args){
JFrame jfrm=新JFrame(“反弹球”);
jfrm.setSize(400400);
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jfrm.setVisible(真);
Ball bl=新球();
组件添加=jfrm.add(bl);
while(true){
bl.move();
bl.重新油漆();
试一试{
睡眠(10);
}捕获(中断异常e){
}
}
}
}

只需扩展
JFrame
并为
Ball
类创建一些构造函数

  • 您可以从任何其他
    JFrame
    类从
    Ball
    类创建实例。
    • Ball bl=新球()/*然后调用方法*/
  • 或者通过两种方式调用
    Ball
    s main方法:
    • Ball.main(空)
    • String args[]={/*一些参数*/};Ball.main(args)
这是您的
Ball
类,它现在扩展了
JFrame

import java.awt.Graphics;
import javax.swing.JFrame;

public class Ball extends JFrame {

    public Ball() {
        setSize(400, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    int x = 0, y = 0;
    int angleX = 1, angleY = 1;

    public void move() {
        if (x + angleX < 0) {
            angleX = 1;
        } else if (x + angleX > getWidth() - 50) {
            angleX = -1;
        } else if (y + angleY < 0) {
            angleY = 1;
        } else if (y + angleY > getHeight() - 50) {
            angleY = -1;
        }
        x = x + angleX;
        y = y + angleY;
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.fillOval(x, y, 50, 50);
    }

    public static void main(String[] args) {

        Ball bl = new Ball();

        while (true) {
            bl.move();
            bl.repaint();
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
            }
        }
    }
}
导入java.awt.Graphics;
导入javax.swing.JFrame;
公共类球框架{
公共舞会{
设置大小(400400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(真);
}
int x=0,y=0;
int angleX=1,angleY=1;
公开作废动议(){
如果(x+角度x<0){
角x=1;
}否则如果(x+angleX>getWidth()-50){
角x=-1;
}如果(y+角度<0),则为else{
angleY=1;
}否则如果(y+angleY>getHeight()-50){
角度=-1;
}
x=x+角度x;
y=y+角度;
}
@凌驾
公共空间涂料(图g){
超级油漆(g);
g、 椭圆形(x,y,50,50);
}
公共静态void main(字符串[]args){
Ball bl=新球();
while(true){
bl.move();
bl.重新油漆();
试一试{
睡眠(10);
}捕捉(中断异常e){
}
}
}
}

“有人能帮我把这段代码转换成extends JFrame吗?”1)只需将面板添加到框架中即可!绝对没有理由延伸框架。2) 具体的技术问题也是如此,而你似乎在寻找导师。投票以“太宽”结束……“我从其他地方获得了一个Java Swing代码……”该代码的作者不知道他们做得好到什么,以至于知道他们重写了错误的绘制方法,因此我们可以提供的最佳建议是将它放回您找到它的地方,并阅读Java教程的课程。“我想这样做,这样我就可以从另一个JFrame类中调用它。”哇!这么短的问题中有这么多糟糕的想法。明白你说的“从另一个JFrame类中调用它”是什么意思吗"? 例如,在按下按钮后是否会弹出某种窗口?如果是这样,您应该使用JDialog,并将此面板添加到其中。您的答案是通过复制原始源代码中的问题来鼓励不良做法。除此之外,它还扩展了frame,虽然这是OP所要求的,但完全没有必要。
有人帮我将此代码转换为extends JFrame。
我只是帮了忙,并更改了原始代码的某些部分。我在哪里复制了这些问题?为了最终解决这个问题,我们必须更改原始源代码。还有其他解决问题的方法吗?“我只是帮了忙”(代码质量的缺乏)并没有帮助。“我在哪里复制了这些问题?”第一个问题在我的第二条评论中提到。第二种方法是使用
while(true){
循环,而不是使用Swing
计时器
来触发重新绘制。@andrewhompson我将在下一个有关
stackoverflow
的活动中以及在我的代码中使用您的建议。谢谢。