Java方法未实现
我创建了一个小Java程序,基本上可以在JFrame中绘制一个键盘控制的圆圈和一些“墙”。下面是它执行时的样子 该计划分为3类:Java方法未实现,java,swing,graphics,Java,Swing,Graphics,我创建了一个小Java程序,基本上可以在JFrame中绘制一个键盘控制的圆圈和一些“墙”。下面是它执行时的样子 该计划分为3类: main.java(主方法类) Infout.java(圆圈+墙构造函数类) world.java(绘制JFrame的类) 代码如下: main.java public class main { public static void main(String[] args) { world w = new world(); Infout o =
public class main {
public static void main(String[] args) {
world w = new world();
Infout o = new Infout();
w.frame();
}
}
import javax.swing.JFrame;
public class world {
JFrame f = new JFrame();
Infout o = new Infout();
public void frame(){
f.setVisible(true);
f.setDefaultCloseOperation(3);
f.setSize(300, 400);
f.setTitle("Circle");
f.add(o);
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
public class Infout extends JPanel implements ActionListener, KeyListener {
Timer t = new Timer(5, this);
double x = 0, y = 0, velx = 0, vely = 0;
public Infout(){
t.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.fill(new Ellipse2D.Double(x, y, 40, 40));
g2.fill(new Rectangle2D.Double(0, 270, 300, 5));
g2.fill(new Rectangle2D.Double(140, 270, 5, 300));
g2.fill(new Rectangle2D.Double(140, 60, 70, 5));
g2.fill(new Rectangle2D.Double(50, 140, 5, 70));
g2.fill(new Rectangle2D.Double(150, 130, 5, 40));
g2.fill(new Rectangle2D.Double(190, 210, 40, 5));
if (x >= 120 && y >= 270) {
g.drawString("You win!",115,35);
}
if (x <= 120 && y >= 270) {
g.drawString("You lose!",115,35);
}
if (x == 120 && y >= 270){
velx = 0;
vely = 0;
}
if (x == 31.5 && y <= 200 && y >= 100){
velx = 0;
}
if (x == 132 && y <= 170 && y >= 100){
velx = 0;
}
if (x <= 190 && x >= 120 && y == 42){
velx = 0;
}
if (x <= 210 && x >= 171 && y == 192){
velx = 0;
}
}
public void actionPerformed(ActionEvent e) {
System.out.println("x "+x+"y "+y);
repaint();
x += velx;
y += vely;
if (x < 0 || x > 260)
{
velx = 0;
vely = 0;
}
if (y < 0 || y > 340)
{
velx = 0;
vely = 0;
}
}
public void up() {
vely = -1.5;
velx = 0;
}
public void down() {
vely = 1.5;
velx = 0;
}
public void left() {
velx = -1.5;
vely = 0;
}
public void right() {
velx = 1.5;
vely = 0;
}
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if (code == KeyEvent.VK_UP) {
up();
}
if (code == KeyEvent.VK_DOWN) {
down();
}
if (code == KeyEvent.VK_RIGHT) {
right();
}
if (code == KeyEvent.VK_LEFT) {
left();
}
}
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
}
world.java
public class main {
public static void main(String[] args) {
world w = new world();
Infout o = new Infout();
w.frame();
}
}
import javax.swing.JFrame;
public class world {
JFrame f = new JFrame();
Infout o = new Infout();
public void frame(){
f.setVisible(true);
f.setDefaultCloseOperation(3);
f.setSize(300, 400);
f.setTitle("Circle");
f.add(o);
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
public class Infout extends JPanel implements ActionListener, KeyListener {
Timer t = new Timer(5, this);
double x = 0, y = 0, velx = 0, vely = 0;
public Infout(){
t.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.fill(new Ellipse2D.Double(x, y, 40, 40));
g2.fill(new Rectangle2D.Double(0, 270, 300, 5));
g2.fill(new Rectangle2D.Double(140, 270, 5, 300));
g2.fill(new Rectangle2D.Double(140, 60, 70, 5));
g2.fill(new Rectangle2D.Double(50, 140, 5, 70));
g2.fill(new Rectangle2D.Double(150, 130, 5, 40));
g2.fill(new Rectangle2D.Double(190, 210, 40, 5));
if (x >= 120 && y >= 270) {
g.drawString("You win!",115,35);
}
if (x <= 120 && y >= 270) {
g.drawString("You lose!",115,35);
}
if (x == 120 && y >= 270){
velx = 0;
vely = 0;
}
if (x == 31.5 && y <= 200 && y >= 100){
velx = 0;
}
if (x == 132 && y <= 170 && y >= 100){
velx = 0;
}
if (x <= 190 && x >= 120 && y == 42){
velx = 0;
}
if (x <= 210 && x >= 171 && y == 192){
velx = 0;
}
}
public void actionPerformed(ActionEvent e) {
System.out.println("x "+x+"y "+y);
repaint();
x += velx;
y += vely;
if (x < 0 || x > 260)
{
velx = 0;
vely = 0;
}
if (y < 0 || y > 340)
{
velx = 0;
vely = 0;
}
}
public void up() {
vely = -1.5;
velx = 0;
}
public void down() {
vely = 1.5;
velx = 0;
}
public void left() {
velx = -1.5;
vely = 0;
}
public void right() {
velx = 1.5;
vely = 0;
}
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if (code == KeyEvent.VK_UP) {
up();
}
if (code == KeyEvent.VK_DOWN) {
down();
}
if (code == KeyEvent.VK_RIGHT) {
right();
}
if (code == KeyEvent.VK_LEFT) {
left();
}
}
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
}
Infout.java
public class main {
public static void main(String[] args) {
world w = new world();
Infout o = new Infout();
w.frame();
}
}
import javax.swing.JFrame;
public class world {
JFrame f = new JFrame();
Infout o = new Infout();
public void frame(){
f.setVisible(true);
f.setDefaultCloseOperation(3);
f.setSize(300, 400);
f.setTitle("Circle");
f.add(o);
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
public class Infout extends JPanel implements ActionListener, KeyListener {
Timer t = new Timer(5, this);
double x = 0, y = 0, velx = 0, vely = 0;
public Infout(){
t.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.fill(new Ellipse2D.Double(x, y, 40, 40));
g2.fill(new Rectangle2D.Double(0, 270, 300, 5));
g2.fill(new Rectangle2D.Double(140, 270, 5, 300));
g2.fill(new Rectangle2D.Double(140, 60, 70, 5));
g2.fill(new Rectangle2D.Double(50, 140, 5, 70));
g2.fill(new Rectangle2D.Double(150, 130, 5, 40));
g2.fill(new Rectangle2D.Double(190, 210, 40, 5));
if (x >= 120 && y >= 270) {
g.drawString("You win!",115,35);
}
if (x <= 120 && y >= 270) {
g.drawString("You lose!",115,35);
}
if (x == 120 && y >= 270){
velx = 0;
vely = 0;
}
if (x == 31.5 && y <= 200 && y >= 100){
velx = 0;
}
if (x == 132 && y <= 170 && y >= 100){
velx = 0;
}
if (x <= 190 && x >= 120 && y == 42){
velx = 0;
}
if (x <= 210 && x >= 171 && y == 192){
velx = 0;
}
}
public void actionPerformed(ActionEvent e) {
System.out.println("x "+x+"y "+y);
repaint();
x += velx;
y += vely;
if (x < 0 || x > 260)
{
velx = 0;
vely = 0;
}
if (y < 0 || y > 340)
{
velx = 0;
vely = 0;
}
}
public void up() {
vely = -1.5;
velx = 0;
}
public void down() {
vely = 1.5;
velx = 0;
}
public void left() {
velx = -1.5;
vely = 0;
}
public void right() {
velx = 1.5;
vely = 0;
}
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if (code == KeyEvent.VK_UP) {
up();
}
if (code == KeyEvent.VK_DOWN) {
down();
}
if (code == KeyEvent.VK_RIGHT) {
right();
}
if (code == KeyEvent.VK_LEFT) {
left();
}
}
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
}
import javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.awt.geom.*;
公共类Infout扩展JPanel实现ActionListener、KeyListener{
定时器t=新定时器(5,此);
双x=0,y=0,velx=0,vely=0;
公共资讯{
t、 start();
addKeyListener(此);
设置聚焦(真);
setFocusTraversalKeysEnabled(false);
试一试{
睡眠(100);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
公共组件(图形g){
超级组件(g);
图形2d g2=(图形2d)g;
g2.填充(新椭圆E2D.双(x,y,40,40));
g2.填充(新矩形2D.双(0,270,300,5));
g2.填充(新矩形2D.双(140270,5300));
g2.填充(新矩形2D.双(140,60,70,5));
g2.填充(新矩形2D.双(50,140,5,70));
g2.填充(新矩形2D.双(150、130、5、40));
g2.填充(新矩形2D.双(190、210、40、5));
如果(x>=120&&y>=270){
g、 抽绳(“你赢了!”,115,35);
}
如果(x=270){
g、 抽绳(“你输了!”,115,35);
}
如果(x==120&&y>=270){
velx=0;
f=0;
}
如果(x==31.5&&y=100){
velx=0;
}
如果(x==132&&y=100){
velx=0;
}
如果(x=120&&y=42){
velx=0;
}
如果(x=171&&y=192){
velx=0;
}
}
已执行的公共无效操作(操作事件e){
系统输出打印项次(“x”+x+“y”+y);
重新油漆();
x+=velx;
y+=0;
如果(x<0 | | x>260)
{
velx=0;
f=0;
}
如果(y<0 | | y>340)
{
velx=0;
f=0;
}
}
公开作废{
vely=-1.5;
velx=0;
}
公众假期{
Vly=1.5;
velx=0;
}
公共空间(左){
velx=-1.5;
f=0;
}
公共无效权(){
velx=1.5;
f=0;
}
按下公共无效键(按键事件e){
int code=e.getKeyCode();
if(code==KeyEvent.VK_UP){
up();
}
if(code==KeyEvent.VK_DOWN){
向下();
}
if(code==KeyEvent.VK_RIGHT){
对();
}
if(code==KeyEvent.VK_左){
左();
}
}
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){}
}
问题是,当我尝试用键盘键移动圆时,圆没有移动!:(Infout.java中的所有代码都是正确的,因为我使用的这个类是另一个程序,并且我能够移动圆圈:/
谢谢
Ab您正在调用
actionPerformed
方法吗
如果没有,则面板可能没有重新绘制本身首先调试您的代码并确保调用了关键侦听器…尝试了解您的代码添加
repaint()时会发生什么
在你的按键
方法中执行了所有if
语句之后?该类没有问题。我认为它与主方法有关。我应该在哪里调用actionPerformed方法?嗯,你应该将其注册到组件中。无论如何,我不会在在像您这样的应用程序中,您可能会有一个无限循环,不时地重新绘制面板。屏幕可能会闪烁,但这是另一个主题的另一个问题