- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个类 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
是挑剔的,它注册到的组件必须具有焦点并且在触发键事件之前是可聚焦的。它也可以被任何其他可聚焦组件覆盖,这可能是好事也可能是坏事。
通常建议改用键绑定(bind) API,这样您可以控制触发事件所需的焦点级别。它的配置和重用性通常也更加灵活
参见 How to Use Key Bindings了解更多详情
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);
}
}
}
作为一般性建议,将对象的字段公开为 public
或 package-private
通常不是一个好主意,您会失去对那里管理的控制,这意味着它们可以在您不知情或无法控制的情况下从任何地方进行修改。
更好地 self 包含这些值的管理(在内部或通过使用 getter)或通过模型- Controller 范例
关于java - 使用键盘向下键在 Jpanel 上移动 BALL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31237983/
执行下面的代码会发生什么? Ball *ball = [[[[Ball alloc] init] autorelease] autorelease]; 最佳答案 让我们分解一下: [Ball allo
我在 Objective-C 中实现了问题“Ball to Ball Collision - Detection and Handling”中的代码。然而,只要球以一定角度碰撞,它们的速度就会急剧增加
我是 SpriteKit 的新手。 我正在尝试解决这个问题:我的场景中有两个球,当我拖动一个球并“击中”另一个球时,这个球应该使用正确的物理原理滚开。 在我的测试代码中我只能“移动”第二个球,他没有使
我有3个文件 文件 1:index.html Bouncing ball 文件 2:bounce.js var ball = document.getEle
我正在尝试使用 Swift 制作 Pong 游戏,但不使用 SpriteKit。到目前为止,我已经能够在我的 View 中成功绘制一个矩形,并且能够在屏幕上拖动它。这是我当前的代码: import U
通常此类游戏中只有 Y 轴移动可用,但我决定以同样允许 X 轴桨移动的方式进行制作。如果我在球击中桨时不在 X 轴上移动桨(在这种情况下它会直接穿过),则游戏工作得很好。如果我在球击中桨之前停止 X
我的问题几乎就在标题中,为什么我在 actionscript 3.0 中一直读到在编写代码时将“思想”与“对象”分开是个好主意? 感谢您的帮助,这让我很困惑。 最佳答案 如果你问为什么图形与定位、运动
Ball-larus“有效路径分析”算法的实现是否随处可用? [在 llvm 中实现会更有帮助] 这是原始论文的 Citeseer 链接 BL96 最佳答案 已经有一个 implementation
我是一个 JS 菜鸟。我正在进入浏览器游戏编程,并想制作一个球掉落和弹跳的快速示例以供学习。由于某种原因,当我创建 jsfiddle 时,我的代码实际上不起作用,我的 div id="ball"的 o
我一直在寻找,知道人们可以使用核心图像和 openGL 来跟踪面部。但是,我不确定从哪里开始使用 iOS 相机跟踪彩球的过程。 一旦我获得了追踪球的线索。我希望创造一些东西来检测。当球改变方向时。 抱
这是我的代码: Touch Tracker Marker body { margin: 0px; overflow
这是我的第一个图形 Java 程序,我想做的是重新创建一个简单的经典程序,其中我有多个球在 JFrame 中弹跳。窗口。 到目前为止,我已经成功地使用 run() 中的代码让一个球弹来弹去。方法。这适
因为我是 XNA 的新手,所以我正在开发一个乒乓球游戏,但我遇到了一个问题......我有 3 个类,"Game1.cs"、"Ball.cs" 和 "GreenPaddle.cs"。 GreenPad
我需要一些简单的 C 语言“球”光栅化例程。 我根据中点-Bresenham 给自己做了一些东西我首先计算的算法(在维基百科中看到)x-y屏幕平面中的圆点 // XXX // XXXXX // XXX
我儿子问我是否可以编写一个小程序让球在屏幕上弹跳,然后让我解释一下。发现一个很好的父子机会,我说“是的!没问题”。所以我挖掘了我的 python 技能并写了这个.. #!/usr/bin/python
我正在尝试更多地了解 Android 中的手势和图形,所以我正在尝试制作一种游戏,您从屏幕中间的一个球(只是一个红色圆圈)开始,如果您滑动在一个方向上,球将朝那个方向发射,屏幕弹跳等。现在,我已经成功
我有两个查询,每个查询返回一个节点 ID 列表 SELECT node.nid FROM dpf_node AS node WHERE node.type = 'image' AND node.
我正在使用 li我的菜单标签,但它一直显示圆盘球 即使我的 html 中没有它... 我怎样才能摆脱它?我查看了谷歌,但找不到答案。 谢谢! 最佳答案 CSS: li { list-style: no
此代码适用于一款名为“brick-breaker”的游戏。我试图让球在与数组相交时改变颜色。我为自定义颜色的 R、G、B 值创建了一个 int,并在与 1-255 之间的数字相交时生成这些 int i
我有一个类 mypanel 从 jpanel 扩展而来,我在其中使用图形并制作球。第二类是 Main,我在其中制作 JFrame 并将面板添加到框架。 Main 中还有另一个类 MKeyListene
我是一名优秀的程序员,十分优秀!