java按键监听没反应_【Java】为什么在按键监听中不能运算?

我在看书的时候,发生了键盘监听的代码,于是就自己开始琢磨起来,但是我写着写着突然发现在按键监听中不能运算,代码如下:

import java.awt.event.*;

import javax.swing.*;

import java.awt.*;

public class Test{

static int x=0;

static int y=0;

public static void main(String[]args){

JFrame 单人游戏=new JFrame("1");

单人游戏.getContentPane().setBackground(new Color(0,0,0));

单人游戏.setSize(640,480);

单人游戏.setLocationRelativeTo(null);

单人游戏.setLayout(null);

单人游戏.setResizable(false);

单人游戏.setVisible(true);

单人游戏.addKeyListener(new KeyAdapter(){

public void keyPressed(KeyEvent e){

if(e.getKeyCode()==KeyEvent.VK_W){

System.out.println(x+";"+(y-1));

}

}

});

}

}

此代码的作用是在我按下“W”键时变量“y”就会减一,但是代码的运行结果是我不管按了多少次“W”输出的都是“0;-1”,这究竟是为什么?

以下是一个简单的 Java 计算器实现,使用 Swing 组件库构建 UI 界面,实现加减乘除四则运算。 ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Calculator extends JFrame implements ActionListener { private JTextField textField; private JButton btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9; private JButton btnPlus, btnMinus, btnMultiply, btnDivide, btnEqual, btnClear; private double num1 = 0, num2 = 0, result = 0; private String operator = ""; public Calculator() { setTitle("Calculator"); setSize(300, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); // Setup UI JPanel panel = new JPanel(new GridLayout(4, 4, 10, 10)); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); textField = new JTextField(); textField.setEditable(false); panel.add(textField); btn0 = new JButton("0"); btn1 = new JButton("1"); btn2 = new JButton("2"); btn3 = new JButton("3"); btn4 = new JButton("4"); btn5 = new JButton("5"); btn6 = new JButton("6"); btn7 = new JButton("7"); btn8 = new JButton("8"); btn9 = new JButton("9"); btnPlus = new JButton("+"); btnMinus = new JButton("-"); btnMultiply = new JButton("*"); btnDivide = new JButton("/"); btnEqual = new JButton("="); btnClear = new JButton("C"); panel.add(btn7); panel.add(btn8); panel.add(btn9); panel.add(btnPlus); panel.add(btn4); panel.add(btn5); panel.add(btn6); panel.add(btnMinus); panel.add(btn1); panel.add(btn2); panel.add(btn3); panel.add(btnMultiply); panel.add(btn0); panel.add(btnClear); panel.add(btnEqual); panel.add(btnDivide); add(panel); // Add event listeners btn0.addActionListener(this); btn1.addActionListener(this); btn2.addActionListener(this); btn3.addActionListener(this); btn4.addActionListener(this); btn5.addActionListener(this); btn6.addActionListener(this); btn7.addActionListener(this); btn8.addActionListener(this); btn9.addActionListener(this); btnPlus.addActionListener(this); btnMinus.addActionListener(this); btnMultiply.addActionListener(this); btnDivide.addActionListener(this); btnEqual.addActionListener(this); btnClear.addActionListener(this); } // Handle button click events public void actionPerformed(ActionEvent e) { if (e.getSource() == btn0) { textField.setText(textField.getText() + "0"); } else if (e.getSource() == btn1) { textField.setText(textField.getText() + "1"); } else if (e.getSource() == btn2) { textField.setText(textField.getText() + "2"); } else if (e.getSource() == btn3) { textField.setText(textField.getText() + "3"); } else if (e.getSource() == btn4) { textField.setText(textField.getText() + "4"); } else if (e.getSource() == btn5) { textField.setText(textField.getText() + "5"); } else if (e.getSource() == btn6) { textField.setText(textField.getText() + "6"); } else if (e.getSource() == btn7) { textField.setText(textField.getText() + "7"); } else if (e.getSource() == btn8) { textField.setText(textField.getText() + "8"); } else if (e.getSource() == btn9) { textField.setText(textField.getText() + "9"); } else if (e.getSource() == btnPlus) { num1 = Double.parseDouble(textField.getText()); operator = "+"; textField.setText(""); } else if (e.getSource() == btnMinus) { num1 = Double.parseDouble(textField.getText()); operator = "-"; textField.setText(""); } else if (e.getSource() == btnMultiply) { num1 = Double.parseDouble(textField.getText()); operator = "*"; textField.setText(""); } else if (e.getSource() == btnDivide) { num1 = Double.parseDouble(textField.getText()); operator = "/"; textField.setText(""); } else if (e.getSource() == btnEqual) { num2 = Double.parseDouble(textField.getText()); switch (operator) { case "+": result = num1 + num2; break; case "-": result = num1 - num2; break; case "*": result = num1 * num2; break; case "/": result = num1 / num2; break; } textField.setText(Double.toString(result)); } else if (e.getSource() == btnClear) { textField.setText(""); } } public static void main(String[] args) { Calculator calc = new Calculator(); calc.setVisible(true); } } ``` 该计算器实现了一个 `JTextField` 用于显示输入和计算结果,以及多个 `JButton` 用于表示数字、运算符和清除按钮。其,数字按钮和运算符按钮都绑定了 `ActionListener` 监听器,通过判断事件源的不同来实现不同的操作。计算器的核心计算逻辑在 `actionPerformed` 方法实现,根据不同的运算符执行不同的计算操作,并将结果显示在文本框。 注意,在计算过程需要将字符串转换成浮点数进行计算,最后再将结果转换回字符串显示在文本框。 完整代码:https://github.com/JackieLin0328/calculator-java
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值