java-使用键盘向下键在Jpanel上移动BALL
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-使用键盘向下键在Jpanel上移动BALL,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3459字,纯文字阅读大概需要5分钟。
内容图文
![java-使用键盘向下键在Jpanel上移动BALL](/upload/InfoBanner/zyjiaocheng/663/9c1242626992410882ad53af278551fb.jpg)
我有一类mypanel,它是从jpanel扩展而来的,在其中我使用图形并制作了一个球.第二类是Main,我制作了JFrame并将面板添加到框架. Main中还有另一个类MKeyListener,它从我处理键盘事件的KeyAdapter类扩展而来.我已经在Main类中创建了Jpanel类的对象,并向jpanel类注册了MkeyListener类.现在我想用向下键盘键向下移动jpanel上的球,但是不使用我程序的向下键向下移动球.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class mypanel extends JPanel{
int n=0;
int m=0;
int i=170;
int j=340;
int a=60;
int b=20;
public void paintComponent (Graphics g){
super.paintComponent(g);
Graphics2D g2= (Graphics2D)g;
g2.setColor(Color.green);
g2.fillOval(n,m,10,10);
}
}
public class Main {
JFrame frame;
mypanel p;
int x,y;
public Main (){
x=0;
y=0;
frame=new JFrame();
Container c = frame.getContentPane();
c.setLayout(new BorderLayout());
p = new mypanel();
c.add(p,BorderLayout.CENTER);
frame.setSize(400,400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MKeyListener k=new MKeyListener();
p.addKeyListener(k);
}
public static void main(String args []) {
Main a= new Main();
}
class MKeyListener extends KeyAdapter {
public void keyPressed(KeyEvent event) {
if (event.getKeyCode()==KeyEvent.VK_DOWN ) {
x =x+4;
y=y+4;
p.n+=x;
p.m+=y;
p.repaint();
System.out.println("success");
}
}
}
}
解决方法:
KeyListener很挑剔,它注册的组件必须具有焦点并且在触发键事件之前是可操作的.它也可以被任何其他可聚焦组件覆盖,这可能是一件好事,也可能是一件坏事.
通常建议改用键绑定API,它使您可以控制触发事件所需的焦点级别.通常,它在配置和可重用性方面也更加灵活
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Main {
public static void main(String args[]) {
Main a = new Main();
}
public Main() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new MyPanel());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class MyPanel extends JPanel {
private int n = 0;
private int m = 0;
private int i = 170;
private int j = 340;
private int a = 60;
private int b = 20;
public MyPanel() {
InputMap im = getInputMap(WHEN_IN_FOCUSED_WINDOW);
ActionMap am = getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "Action.down");
am.put("Action.down", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
n += 4;
m += 4;
repaint();
}
});
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.green);
g2.fillOval(n, m, 10, 10);
}
}
}
作为一般性建议,将对象的字段公开为公共包或私有包通常是一个坏主意,您将失去对那里的管理的控制权,这意味着可以在您不了解或无法控制的任何地方修改它们.
更好地自我约束这些值的管理(内部或通过使用吸气剂)或通过模型控制器范例进行管理
内容总结
以上是互联网集市为您收集整理的java-使用键盘向下键在Jpanel上移动BALL全部内容,希望文章能够帮你解决java-使用键盘向下键在Jpanel上移动BALL所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。