首页 >> 大全

关于JButton重写getX(),getY()

2023-11-23 大全 31 作者:考证青年

首先说结论:

1.在实例中,不设定(null)的话,的方法失效.

2不要在中重写getX()和getY()方法,因为虽然中没有这两个方法,但是中却有,而且每次对象使用x或y变量时都会调用一次get方法.

最近在重构一个是男人就坚持30秒小游戏,原代码文件只有一个。包含各种内部类,方法调用盘根错节,注释也少,加上自己萌新,打算用来练手。。

先把每行代码加上了注释之后,再把方法和类按照调用顺序排好,查看起来算是没那么费劲了,就打算将其中的类分别进行梳理封装,一开始就遇到一个问题,解决之后发文纪录下。

上代码

关于JButton重写getX(),getY()_关于JButton重写getX(),getY()_

public class GameMain extends JFrame{public static final int WIDTH=700;public static final int HEIGHT=WIDTH;private JPanel jPanel;private JLabel jLabel;private ArrayList shList = new ArrayList();public GameMain() {super();//窗口尺寸this.setSize(WIDTH, HEIGHT);//监听窗口方法,关闭窗口时,结束程序this.addWindowListener(new java.awt.event.WindowAdapter() {public void windowClosing(java.awt.event.WindowEvent e) {System.exit(1);}});//设置窗口标题this.setTitle("模拟撑过30秒的小DEMO复刻版");//设置窗口可见this.setVisible(true);//设置窗口的背景和this.setContentPane(getJPanel());}/*** 游戏窗口背景* @return*/private JPanel getJPanel() {jPanel = new JPanel();//布局为空,很重要!注释掉setBounds失效!jPanel.setLayout(null);//背景色jPanel.setBackground(new Color(1, 1, 1));return jPanel;}public void start() {for(int i=0;i<100;i++) {Shoot shoot = new Shoot();jPanel.add(shoot);Thread sh = new Thread(shoot);sh.start();}}public static void main(String[] args) {GameMain game = new GameMain();game.start();}
}

public class Shoot extends JButton implements Runnable{private static final int length =10;private int x = 20;private int y = 20;private int xSpeed = 5;private int ySpeed = 5;public Shoot() {//设定方块位置resultLocal();//设定方块属性setBounds(x, y, length, length);}public void run() {while(true) {try {x+=xSpeed;y+=ySpeed;setLocation(x, y);Thread.sleep(50);} catch (InterruptedException e) {e.printStackTrace();}}}public int getxSpeed(int x) {return x-this.x;}public int getySpeed(int y) {return y-this.y;}public int getX() {return (int)(Math.random());}public int getY() {return y;}

一开始运行之后是这样的

如果将(null)注释的话

002

会有按钮不按设定的size显示

十分古怪的是,不论如何设定,图标都只在最左出现并向下移动,可是控制台的中输出的x却明明一直都在变化…

003

后来找半天才发现getX()中的值因为强转的关系永远返回0,设定(int)(Math.()*700)之后方块在窗口中乱闪才觉得哪里不对劲。

之后搜了下…恩是方法中的getX()方法覆盖了中的getX(),本来打算在其出界后可以调用方法直接初始化坐标,没想到却出了这么个岔子哈哈。。

Ctrl+T查看了下继承关系,上面确实有

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了