java - 变量值与编程值不同
问题描述
如果我在这里创建了一个致命的编程错误,请原谅我。我对编码/编程完全陌生。这是我第一次做 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 上,它不会显示我编程的内容,值不断变化太多。
解决方案
您必须按住 Tab 键,然后使用键盘箭头移动形状。
推荐阅读
- flutter - 返回地图时 FutureBuilder 中的空快照
- java - 使用 spring mvc mybatis 从 oracle db 获取失败的用户登录结果的数量
- javascript - 如何让这段代码在现代 nodejs 中运行?
- swagger-ui - .net core 3 AddSwaggerGen (SWAGGER UI) with security, Missing the string: "Bearer" in the authorization header
- xamarin.forms - Xamarin:如果条件为假,则隐藏按钮
- web-scraping - 如何找到像谷歌学者一样要刮的所有期刊的列表?
- here-api - DOM 标记的锚定和旋转
- c++ - 如何在 C++ 中使用向量计算平均值?
- java - 如何将上传到 Cloud Storage 的图片调整为指定大小?
- uitextfield - UITextField 中的验证