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

2023-11-22 22:20
文章标签 重写 jbutton getx gety

本文主要是介绍关于JButton重写getX(),getY(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先说结论:
1.在JPanel实例中,不设定setLayout(null)的话,JButton的setBounds方法失效.

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

最近在重构一个是男人就坚持30秒小游戏,原代码文件只有一个。包含各种内部类,方法调用盘根错节,注释也少,加上自己萌新,打算用来练手。。
先把每行代码加上了注释之后,再把方法和类按照调用顺序排好,查看起来算是没那么费劲了,就打算将其中的类分别进行梳理封装,一开始就遇到一个问题,解决之后发文纪录下。
上代码

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<Shoot> shList = new ArrayList<Shoot>();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;}

一开始运行之后是这样的
001

如果将setLayout(null)注释的话
002
会有按钮不按设定的size显示

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

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

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

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

这篇关于关于JButton重写getX(),getY()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/413308

相关文章

Ext重写手法

常用的几种方式:1、Ext.apply()和Ext.applyIf()2、Ext.override()3、想做某个类大的修改,可以把该类单独从源码中拿出来,直接修改,然后引用时先应用ext-all.js,再引用从源码中拿出修改的那个类4、obj.prototype.method=function(){}

泛型第二课,派生子类、属性类型、方法重写、泛型擦除

子类(实现类) 子类与父类|接口一样使用泛型子类指定具体的类型子类与父类|接口 同时擦除类型子类泛型,父类|接口 擦除错误:不能子类擦除,父类|接口泛型 package com.pkushutong.genericity3;/*** 父类为泛型类* 1、属性* 2、方法* * 要么同时擦除,要么子类大于等于父类的类型* 不能子类擦除,父类泛型* 1、属性类型* 父类中,随父类型定

Python中的方法重写与多态:解锁编程的无限可能

在编程的世界里,灵活性与扩展性往往是衡量一个语言是否强大、易于维护的关键指标。Python,作为一种被广泛使用的高级编程语言,不仅以其简洁易读的语法赢得了众多开发者的喜爱,更因其支持多种面向对象特性而备受青睐。其中,“方法重写”与“多态”便是两个核心概念,它们不仅能够极大地提高代码的复用性和可维护性,还能帮助我们构建更加灵活、健壮的软件系统。本文将通过一系列由浅入深的例子,带你一起探索这两个概念的

【大数据Java基础-JAVA 面向对象13】面向对象的特征二:继承性 (二) 方法的重写

1.什么是方法的重写(override 或 overwrite)? 子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作. 2. 应用: 重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参数的方法时,实际执行的是子类重写父类的方法。 3.举例: class Circle{ public double findArea(){}//求面积 } class Cylinder e

iis7 url重写和重定向

注意不管是重写还是redirect重定向,匹配的url都要写成当前网站的url,也就是真是真实可以访问的,如当前网站ip为127.0.0.1,可以写成^127.0.0.1$ (1)url重写(可以实现伪静态) IIS实现反向代理 新建两个站点,端口分别使用 80 和 81,在DNS中新建A记录,指向该计算机(10.4.34.41) 配置过程如下: 1.在Windows Server

重写equals和hashCode的原则规范

当符合以下条件时不需要重写equals方法:     1.     一个类的每一个实例本质上都是唯一的。     2.     不关心一个类是否提供了“逻辑相等”的测试功能     3.     超类已经改写了equals方法,并且从超类继承过来的行为对于子类也是合适的。     4.     一个类时私有的或者是package私有的,并且可以确定它的equals方法永远不会被调用。(这

Django学习(二)(重写User类)

一、重写User类: 1、首先导入User类: from django.contrib.auth.models import User 2、然后点在User上,按住ctrl 点进去,发现 User类继承AbstractUser Ctrl点进去AbstractUser,然后将此方法全部复制到自己APP的models.py里: 可以修改名字,导入 from django.cont

springBoot重写start run方法

Spring Boot允许开发者自定义应用程序启动过程,如果想要重写start方法,通常是在实现了CommandLineRunner, ApplicationRunner, 或者ApplicationListener<ContextRefreshedEvent>接口的类中。这些接口的目的是在Spring应用上下文初始化完成后执行一些定制的操作。 例如,如果你创建了一个类并实现了Applicati

static_隐式参数_继承_重写_toString_组合JAVA036-042

来源:http://www.bjsxt.com/ 1、S01E036_01static变量和方法 static变量和方法存放在方法区中 2、S01E037_01隐式参数this和super 类的构造方法调用自己的无参构造方法this()或有参构造方法this(a[,b…]):必须位于第一行 3、S01E038_01面向对象的三大特征(继承、封装、多态)之一:继承(extends)

【Java】继承性-方法的重写【主线学习笔记】

文章目录 前言方法的重写1、方法重写的规则示例 2、区分方法的重载与重写重写的示例重载的示例 前言 Java是一门功能强大且广泛应用的编程语言,具有跨平台性和高效的执行速度,广受开发者喜爱。在接下来的学习过程中,我将记录学习过程中的基础语法、框架和实践技巧等,分享学习心得,对自己学习过程进行整理和总结,也希望能为其他学习Java的朋友提供一些帮助和参考。 方法的