package Shixun4_8; import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; class FrameWithKeyEvent extends JFrame implements KeyListener { JButton b[]=new JButton[3]; int x,y; FrameWithKeyEvent(){ setSize(300,300); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); setLayout(new FlowLayout()); for(int i=0;i<=2;i++) { b[i]=new JButton(" "+i); b[i].addKeyListener(this); add(b[i]); } validate(); } public void keyPressed(KeyEvent e) { JButton button=(JButton)e.getSource(); x=button.getBounds().x; y=button.getBounds().y; if(e.getKeyCode()==KeyEvent.VK_UP) { y=y-2; if(y<=0)y=300; button.setLocation(x,y); } else if(e.getKeyCode()== KeyEvent.VK_DOWN) { y=y+2; if(y>=300)y=0; button.setLocation(x,y); } else if(e.getKeyCode()==KeyEvent.VK_LEFT) { x=x-2; if(x<=0)x=300; button.setLocation(x,y); } else if(e.getKeyCode()==KeyEvent.VK_RIGHT) { x=x+2; if(x>=300)x=0; button.setLocation(x,y); } } public void keyReleased(KeyEvent e) {} public void keyTyped(KeyEvent e) {} } public class Shixun4_8 { public static void main(String[] args) { new FrameWithKeyEvent(); } }逐行代码解释
时间: 2023-11-27 18:03:23 浏览: 138
首先,这是一个Java程序,包含一个名为Shixun4_8的public class。
第1-2行导入了javax.swing和java.awt包。
第4-23行定义了一个名为FrameWithKeyEvent的类,它扩展了JFrame并实现了KeyListener接口。该类包含三个按钮和一个构造函数。
在构造函数中,首先调用setSize()方法来设置窗口的大小为300x300像素。接着,调用setVisible()方法使窗口可见,调用setDefaultCloseOperation()方法以便在关闭窗口时退出程序,调用setLayout()方法来设置按钮的布局方式为FlowLayout。然后,使用for循环创建三个按钮,并将每个按钮添加到窗口中。最后,调用validate()方法以确保窗口的内容被正确布局。
在FrameWithKeyEvent类中,实现了三个方法:keyPressed()、keyReleased()和keyTyped(),这些方法都是从KeyListener接口继承而来的。
在keyPressed()方法中,首先使用getSource()方法获取触发事件的组件,然后获取该组件的位置坐标x和y。根据按下的键的不同,分别对x和y进行加减操作,以实现按钮的移动。如果移动到了边缘,就将位置坐标重置为相反的边缘位置。最后,使用setLocation()方法将按钮移动到新的位置。
在keyReleased()和keyTyped()方法中,由于我们不需要响应这两个事件,因此这两个方法的实现为空。
最后,在main()方法中,创建了一个FrameWithKeyEvent对象,以启动程序。
阅读全文