首页 > 解决方案 > 变量值与编程值不同

问题描述

如果我在这里创建了一个致命的编程错误,请原谅我。我对编码/编程完全陌生。这是我第一次做 OOP。欢迎所有意见和建议

我想创建一个 java GUI,我可以在其中使用键盘箭头移动形状并在 JTextField 内显示形状的坐标

所以我创建了一个包 move,其中包含 2 个 java 类 move.java 和 second.java

下面是move.java

package move;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;


public class Move{


public static void main(String[] args) {

JFrame f = new JFrame();
second s = new second();
f.add(s);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(800,600);

    // TODO code application logic here
}

}

这是 Second.java

package move;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Ellipse2D;
import javax.swing.JPanel;
import javax.swing.Timer;


public class second extends JPanel implements ActionListener, KeyListener, MouseListener {

private TextField tfX;
private TextField tfY;
private TextField tfMouseClickX;
private TextField tfMouseClickY;

Timer t = new Timer(10,this);
double x = 50, y = 50, velx = 0, vely = 0;

public second(){
    add(new Label("X Position"));
    tfX = new TextField(10);
    tfX.setEditable(false);
    add(tfX);

    add(new Label("Y Position"));
    tfY = new TextField(10);
    tfY.setEditable(false);
    add(tfY);

    add(new Label("X-Click: "));
    tfMouseClickX = new TextField(10);
    tfMouseClickX.setEditable(false);
    add(tfMouseClickX);
    add(new Label("Y-Click: "));
    tfMouseClickY = new TextField(10);
    tfMouseClickY.setEditable(false);
    add(tfMouseClickY);

    t.start();
    addMouseListener(this);
    addKeyListener(this);
    setFocusable(true);
    setFocusTraversalKeysEnabled(false);
}

public void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.setColor(Color.RED);
    g2.fill(new Ellipse2D.Double(x,y,50,50));
}

public void actionPerformed(ActionEvent e){
    repaint();
    x += velx;
    y += vely;
}

    public void keyPressed(KeyEvent e){

    int code = e.getKeyCode();
    if (code == KeyEvent.VK_UP){
        vely = -5;
        velx = 0;
        tfX.setText(Double.toString(x));
        tfY.setText(Double.toString(y));

    }
    else if (code == KeyEvent.VK_DOWN){
        vely = 5;
        velx = 0;
        tfX.setText(Double.toString(x));
        tfY.setText(Double.toString(y));
    }
    else if (code == KeyEvent.VK_LEFT){
        velx = -5;
        vely = 0;
        tfX.setText(Double.toString(x));
        tfY.setText(Double.toString(y));
    }
    else if (code == KeyEvent.VK_RIGHT){
        velx = 5;
        vely = 0;
        tfX.setText(Double.toString(x));
        tfY.setText(Double.toString(y));
    }

}
    public void keyTyped(KeyEvent e){}
    public void keyReleased(KeyEvent e){
    velx = 0;
    vely = 0;
    }

@Override
public void mouseClicked(MouseEvent e) {
    tfMouseClickX.setText(e.getX() + "");
    tfMouseClickY.setText(e.getY() + "");
}

@Override
public void mousePressed(MouseEvent e) {}

@Override
public void mouseReleased(MouseEvent e) {}

@Override
public void mouseEntered(MouseEvent e) {}

@Override
public void mouseExited(MouseEvent e) {}
}

我为每个动作的坐标分配了 5 或 -5 的值。但是在 TextField 上,它不会显示我编程的内容,值不断变化太多。

标签: javatextnetbeansjtextfield

解决方案


您必须按住 Tab 键,然后使用键盘箭头移动形状。


推荐阅读