Java 如何将JPanel转换为弹跳球的JFrame?
我从其他地方获得了一个关于弹跳球的Java Swing代码。代码使用一个类“Ball”,它扩展了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)
JPanel
有人能帮我将此代码转换为extensedJFrame
。
我想这样做,以便能够从另一个框架类调用它。
代码如下:
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=新球()/*然后调用方法*/
- 或者通过两种方式调用
s main方法:Ball
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
的活动中以及在我的代码中使用您的建议。谢谢。