使用arraylist从jpanel中删除矩形 ”包javaapplication12; 导入java.awt.*; 导入java.awt.event.KeyEvent; 导入java.awt.event.KeyListener; 导入java.awt.g
使用arraylist从jpanel中删除矩形使用arraylist从jpanel中删除矩形 ”包javaapplication12; 导入java.awt.*; 导入java.awt.event.KeyEvent; 导入java.awt.event.KeyListener; 导入java.awt.g,java,arraylist,jpanel,paintcomponent,rectangles,Java,Arraylist,Jpanel,Paintcomponent,Rectangles,使用arraylist从jpanel中删除矩形 ”包javaapplication12; 导入java.awt.*; 导入java.awt.event.KeyEvent; 导入java.awt.event.KeyListener; 导入java.awt.geom.Ellipse2D; 导入java.awt.geom.Rectangle2D; 导入java.awt.geom.RoundRectangle2D; 导入java.util.ArrayList; 导入java.util.Iterator;
”包javaapplication12;
导入java.awt.*;
导入java.awt.event.KeyEvent;
导入java.awt.event.KeyListener;
导入java.awt.geom.Ellipse2D;
导入java.awt.geom.Rectangle2D;
导入java.awt.geom.RoundRectangle2D;
导入java.util.ArrayList;
导入java.util.Iterator;
导入javax.swing.*;
/**通过自定义线程反弹球(动画)*/
公共类JavaApplication12扩展JFrame实现KeyListener{
//定义命名常量
专用静态最终整型画布宽度=640;
专用静态最终整型画布高度=480;
私有静态最终整型更新\u间隔=30;//毫秒
int xx=200;
int yy=400;
形状a1;
形状a2;
矩形2D a3;
矩形2D a12;
矩形;
矩形;
矩形2D a6;
矩形2D a7;
矩形2D a8;
矩形2D a9;
矩形2D a10;
矩形2D a11;
矩形2D a13;
矩形2D a14;
矩形2D a15;
矩形2D a16;
矩形2D a17;
矩形2D a18;
矩形2D a19;
矩形2D a20;
矩形2D a21;
矩形2D a22;
矩形2D a23;
矩形2D a25;
ArrayList s=新的ArrayList();
颜色c2=颜色。红色;
私有DrawCanvas;//绘图画布(扩展JPanel)
//运动对象的属性
private int x=375;//左上角(x,y)
私人int y=355;
私有int size=20;//宽度和高度
private int xSpeed=3;//在x和y方向上的移动速度
private int ySpeed=5;//x和y中每一步的位移
/**构造函数来设置GUI组件*/
公共JavaApplication12(){
画布=新的DrawCanvas();
setPreferredSize(新维度(画布宽度、画布高度));
这个.setContentPane(画布);
此.setDefaultCloseOperation(关闭时退出);
这个包();
这是setTitle(“弹跳球”);
此.setVisible(true);
addKeyListener(此);
乐趣();
//创建一个新线程以定期运行更新
Thread updateThread=新线程(){
@凌驾
公开募捐{
while(true){
update();//更新(x,y)位置
repaint();//刷新JFrame。回调paintComponent()
试一试{
//延迟并给其他线程一个运行的机会
Thread.sleep(更新间隔);//毫秒
}捕获(中断异常忽略){}
}
}
};
updateThread.start();//调用回运行()
}
/**更新移动对象的(x,y)位置*/
公共无效更新(){
x+=x速度;
y+=y速度;
如果(x>CANVAS|u WIDTH-size | x<0){
xSpeed=-xSpeed;
}
如果(y>CANVAS|U高度-大小| y<0){
ySpeed=-ySpeed;
}
}
@凌驾
public void keyTyped(KeyEvent ke){
}
@凌驾
按下公共无效键(KeyEvent ke){
int keycode=ke.getKeyCode();
if(keycode==KeyEvent.VK_左)
{
xx=xx-15;
}
if(keycode==KeyEvent.VK_RIGHT)
{
xx=xx+15;
}
}
@凌驾
公开无效密钥已释放(密钥事件){
//抛出新的UnsupportedOperationException(“尚未支持”);
}
/**DrawCanvas(内部类)是用于自定义绘图的JPanel*/
类DrawCanvas扩展了JPanel{
私有静态最终长serialVersionUID=1L;
@凌驾
公共组件(图形g){
super.paintComponent(g);//绘制父对象的背景
图形2d=(图形2d)g;
用于(二维矩形:s){
d、 填充(r);
}
挫折背景(颜色:黑色);
g、 setColor(Color.BLUE);
a1=新的椭圆E2D双精度(x,y,尺寸,尺寸);
a2=新的圆形矩形2D.双(xx,yy,120,10,20,20);
a25=新的矩形2D双(530120100,20);
d、 填料(a1);
d、 setPaint(c2);
d、 填料(a2);
if(a1.相交(a3.getBounds()))
{
s、 移除(a3);ySpeed=-ySpeed;
}
if(a1.相交(a4.getBounds()))
{
s、 移除(a4);ySpeed=-ySpeed;
}
if(a1.相交(a5.getBounds()))
{
s、 移除(a5);ySpeed=-ySpeed;
}
if(a1.相交(a6.getBounds()))
{
s、 移除(a6);ySpeed=-ySpeed;
}
if(a1.相交(a7.getBounds()))
{
s、 移除(a7);ySpeed=-ySpeed;
}
if(a1.相交(a8.getBounds()))
{
s、 移除(a8);ySpeed=-ySpeed;
}
if(a1.相交(a9.getBounds()))
{
s、 移除(a9);ySpeed=-ySpeed;
}
if(a1.相交(a10.getBounds()))
{
s、 移除(a10);ySpeed=-ySpeed;
}
if(a1.相交(a11.getBounds()))
{
s、 移除(a11);ySpeed=-ySpeed;
}
if(a1.相交(a12.getBounds()))
{
s、 移除(a12);ySpeed=-ySpeed;
}
if(a1.相交(a13.getBounds()))
{
s、 移除(a13);ySpeed=-ySpeed;
}
if(a1.相交(a14.getBounds()))
{
s、 移除(a14);ySpeed=-ySpeed;
}
if(a1.相交(a15.getBounds()))
{
s、 移除(a15);ySpeed=-ySpeed;
}
if(a1.相交(a16.getBounds()))
{
s、 移除(a16);ySpeed=-ySpeed;
}
if(a1.相交(a17.getBounds()))
{
s、 移除(a17);ySpeed=-ySpeed;
}
if(a1.相交(a18.getBounds()))
{
s、 移除(a18);ySpeed=-ySpeed;
}
if(a1.相交(a19.getBounds()))
{
s、 移除(a19);ySpeed=-ySpeed;
}
if(a1.相交(a20.getBounds()))
{
s、 移除(a20);ySpeed=-ySpeed;
}
如果(a1.相交(a21))
{
s、 移除(a21);ySpeed=-ySpeed;
}
if(a1.相交(a22))
{
s、 移除(a21);ySpeed=-ySpeed;
ySpeed=-ySpeed;
}
碰撞();
}
}
公开决赛
{
a3=新矩形2D双(20,15100,20);
a4=新矩形2D双(150,15100,20);
a5=新矩形2D双(280,15100,20);
a6=新矩形2D双(400,15100,20);
a7=新矩形2D双(530,15100,20);
a8=新矩形2D双(20,50100,20);
a9=新矩形2D双(150,50100,20);
a10=新矩形2D双(280,50100,
'package javaapplication12;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.*;
/** Bouncing Ball (Animation) via custom thread */
public class JavaApplication12 extends JFrame implements KeyListener{
// Define named-constants
private static final int CANVAS_WIDTH = 640;
private static final int CANVAS_HEIGHT = 480;
private static final int UPDATE_INTERVAL = 30; // milliseconds
int xx = 200;
int yy = 400;
Shape a1;
Shape a2;
Rectangle2D a3;
Rectangle2D a12;
Rectangle2D a4;
Rectangle2D a5;
Rectangle2D a6;
Rectangle2D a7;
Rectangle2D a8;
Rectangle2D a9;
Rectangle2D a10;
Rectangle2D a11;
Rectangle2D a13;
Rectangle2D a14;
Rectangle2D a15;
Rectangle2D a16;
Rectangle2D a17;
Rectangle2D a18;
Rectangle2D a19;
Rectangle2D a20;
Rectangle2D a21;
Rectangle2D a22;
Rectangle2D a23;
Rectangle2D a25;
ArrayList<Rectangle2D> s = new ArrayList<Rectangle2D>();
Color c2 = Color.RED;
private DrawCanvas canvas; // the drawing canvas (extends JPanel)
// Attributes of moving object
private int x = 375; // top-left (x, y)
private int y = 355;
private int size = 20; // width and height
private int xSpeed = 3; // moving speed in x and y directions
private int ySpeed = 5; // displacement per step in x and y
/** Constructor to setup the GUI components */
public JavaApplication12() {
canvas = new DrawCanvas();
canvas.setPreferredSize(new Dimension(CANVAS_WIDTH, CANVAS_HEIGHT));
this.setContentPane(canvas);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.pack();
this.setTitle("Bouncing Ball");
this.setVisible(true);
addKeyListener(this);
fun();
// Create a new thread to run update at regular interval
Thread updateThread = new Thread() {
@Override
public void run() {
while (true) {
update(); // update the (x, y) position
repaint(); // Refresh the JFrame. Called back paintComponent()
try {
// Delay and give other thread a chance to run
Thread.sleep(UPDATE_INTERVAL); // milliseconds
} catch (InterruptedException ignore) {}
}
}
};
updateThread.start(); // called back run()
}
/** Update the (x, y) position of the moving object */
public void update() {
x += xSpeed;
y += ySpeed;
if (x > CANVAS_WIDTH - size || x < 0) {
xSpeed = -xSpeed;
}
if (y > CANVAS_HEIGHT - size || y < 0) {
ySpeed = -ySpeed;
}
}
@Override
public void keyTyped(KeyEvent ke) {
}
@Override
public void keyPressed(KeyEvent ke) {
int keycode = ke.getKeyCode();
if(keycode == KeyEvent.VK_LEFT)
{
xx = xx-15;
}
if(keycode == KeyEvent.VK_RIGHT)
{
xx = xx+15;
}
}
@Override
public void keyReleased(KeyEvent ke) {
// throw new UnsupportedOperationException("Not supported yet.");
}
/** DrawCanvas (inner class) is a JPanel used for custom drawing */
class DrawCanvas extends JPanel {
private static final long serialVersionUID = 1L;
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g); // paint parent's background
Graphics2D d = (Graphics2D)g;
for(Rectangle2D r : s){
d.fill(r);
}
setBackground(Color.BLACK);
g.setColor(Color.BLUE);
a1 = new Ellipse2D.Double(x,y,size,size);
a2 = new RoundRectangle2D.Double(xx,yy,120,10,20,20);
a25 = new Rectangle2D.Double(530,120,100,20);
d.fill(a1);
d.setPaint(c2);
d.fill(a2);
if(a1.intersects(a3.getBounds()))
{
s.remove(a3);ySpeed = -ySpeed;
}
if(a1.intersects(a4.getBounds()))
{
s.remove(a4);ySpeed = -ySpeed;
}
if(a1.intersects(a5.getBounds()))
{
s.remove(a5);ySpeed = -ySpeed;
}
if(a1.intersects(a6.getBounds()))
{
s.remove(a6);ySpeed = -ySpeed;
}
if(a1.intersects(a7.getBounds()))
{
s.remove(a7);ySpeed = -ySpeed;
}
if(a1.intersects(a8.getBounds()))
{
s.remove(a8);ySpeed = -ySpeed;
}
if(a1.intersects(a9.getBounds()))
{
s.remove(a9);ySpeed = -ySpeed;
}
if(a1.intersects(a10.getBounds()))
{
s.remove(a10);ySpeed = -ySpeed;
}
if(a1.intersects(a11.getBounds()))
{
s.remove(a11);ySpeed = -ySpeed;
}
if(a1.intersects(a12.getBounds()))
{
s.remove(a12);ySpeed = -ySpeed;
}
if(a1.intersects(a13.getBounds()))
{
s.remove(a13);ySpeed = -ySpeed;
}
if(a1.intersects(a14.getBounds()))
{
s.remove(a14);ySpeed = -ySpeed;
}
if(a1.intersects(a15.getBounds()))
{
s.remove(a15);ySpeed = -ySpeed;
}
if(a1.intersects(a16.getBounds()))
{
s.remove(a16);ySpeed = -ySpeed;
}
if(a1.intersects(a17.getBounds()))
{
s.remove(a17);ySpeed = -ySpeed;
}
if(a1.intersects(a18.getBounds()))
{
s.remove(a18);ySpeed = -ySpeed;
}
if(a1.intersects(a19.getBounds()))
{
s.remove(a19);ySpeed = -ySpeed;
}
if(a1.intersects(a20.getBounds()))
{
s.remove(a20);ySpeed = -ySpeed;
}
if(a1.intersects(a21))
{
s.remove(a21);ySpeed = -ySpeed;
}
if(a1.intersects(a22))
{
s.remove(a21);ySpeed = -ySpeed;
ySpeed = -ySpeed;
}
collide();
}
}
public final void fun()
{
a3 = new Rectangle2D.Double(20,15,100,20);
a4 = new Rectangle2D.Double(150,15,100,20);
a5 = new Rectangle2D.Double(280,15,100,20);
a6 = new Rectangle2D.Double(400,15,100,20);
a7 = new Rectangle2D.Double(530,15,100,20);
a8 = new Rectangle2D.Double(20,50,100,20);
a9 = new Rectangle2D.Double(150,50,100,20);
a10 = new Rectangle2D.Double(280,50,100,20);
a12 = new Rectangle2D.Double(400,50,100,20);
a11 = new Rectangle2D.Double(530,50,100,20);
a13 = new Rectangle2D.Double(20,85,100,20);
a14 = new Rectangle2D.Double(150,85,100,20);
a15 = new Rectangle2D.Double(280,85,100,20);
a16 = new Rectangle2D.Double(400,85,100,20);
a17 = new Rectangle2D.Double(530,85,100,20);
a18 = new Rectangle2D.Double(20,120,100,20);
a19 = new Rectangle2D.Double(150,120,100,20);
a20 = new Rectangle2D.Double(280,120,100,20);
a21 = new Rectangle2D.Double(400,120,100,20);
a22 = new Rectangle2D.Double(530,120,100,20);
s.add(a3);
s.add(a4);
s.add(a5);
s.add(a6);
s.add(a7);
s.add(a8);
s.add(a9);
s.add(a10);
s.add(a11);
s.add(a12);
s.add(a13);
s.add(a14);
s.add(a15);
s.add(a16);
s.add(a17);
s.add(a18);
s.add(a19);
s.add(a20);
s.add(a21);
s.add(a22);
}
public void collide()
{
if(a2.intersects(a1.getBounds()))
{
xSpeed = +xSpeed;
ySpeed = -ySpeed;
}
}
public static void main(String[] args) {
// Run GUI codes in Event-Dispatching thread for thread safety
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new JavaApplication12(); // Let the constructor do the job
}
});
}
} `
if(a1.intersects(a3.getBounds()))
if(s.contains(a3) && a1.intersects(a3.getBounds()))
if(a1.intersects(a22))
{
s.remove(a21);ySpeed = -ySpeed;
ySpeed = -ySpeed;
}
if(a1.intersects(a22))
{
s.remove(a22);ySpeed = -ySpeed;
}