如何更清晰地编写此Java代码段

如何更清晰地编写此Java代码段,java,Java,我编写了这个Java代码段,它使用侦听器来检测是否输入了某个键 边缘有点粗糙,想知道是否有更好的书写方式(例如,我希望输出文本显示在JTextField打印中,目前“打印”是一个小矩形框…我希望它是一个块,文本显示在其中) 代码如下: import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.*; public class Test2{ public Test2

我编写了这个Java代码段,它使用侦听器来检测是否输入了某个键

边缘有点粗糙,想知道是否有更好的书写方式(例如,我希望输出文本显示在JTextField打印中,目前“打印”是一个小矩形框…我希望它是一个块,文本显示在其中)

代码如下:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.*;

public class Test2{
    
    public Test2() {
        JFrame jframe = new JFrame();
        jframe.setSize(300,300);
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        JPanel jpanel= new JPanel();
        jpanel.add(new JLabel("Enter your name:"));
        JTextField nameField = new JTextField("    ");
        jpanel.add(nameField);
        JTextArea print = new JTextArea("");
        jpanel.add(print);
    
        nameField.addKeyListener(new KeyListener() {
            public void keyTyped(KeyEvent e) {
                if (e.getKeyChar() == 65) {
                    print.setText("A was typed!");
                }
                
                if (e.getKeyChar() == 66) {
                    System.out.println("B was typed!");
                }
            }
            
            public void keyPressed(KeyEvent e) {
                // TODO Auto-generated method stub
            }

            @Override
            public void keyReleased(KeyEvent e) {
                // TODO Auto-generated method stub
            }
        });

        jframe.add(jpanel);
        jframe.setVisible(true);
    }

    public static void main(String[] args) {
        new Test2();
    }
}
希望这有意义

而不是
if(例如getKeyChar()==number)

您可以使用
开关

public void keyTyped(KeyEvent e) {
    switch (e.getKeyChar()) {
        case 65: print.setText("A was typed!"); break;
        case 66: print.setText("B was typed!"); break;
    }
}
而不是
if(例如getKeyChar()==number)

您可以使用
开关

public void keyTyped(KeyEvent e) {
    switch (e.getKeyChar()) {
        case 65: print.setText("A was typed!"); break;
        case 66: print.setText("B was typed!"); break;
    }
}

如果希望允许字母数超过A和B,可以执行以下操作:

1-在类中声明字符串:

private static String chars = "ABCDEFG12345";
2-使用此
keyTyped(KeyEvent e)
方法:

public void keyTyped(KeyEvent e) {
    char c = e.getKeyChar();
    if (chars.indexOf(c) != -1) // If chars contains the char
        print.setText(c + " was typed!");
    else print.setText("");
}
完整代码:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.*;

public class Test2 {
    private static String chars = "ABCDEFG12345";

    public Test2() {
        JFrame jframe = new JFrame();
        jframe.setSize(300,300);
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        JPanel jpanel= new JPanel();

        JLabel label = new JLabel("Enter your name:");
        JTextField nameField = new JTextField("");
        JTextArea print = new JTextArea("");

        jpanel.add(label);
        jpanel.add(nameField);
        jpanel.add(print);
    
        nameField.addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent e) {
                char c = e.getKeyChar();
                if (chars.indexOf(c) != -1) // If chars contains the char
                    print.setText(c + " was typed!");
                else print.setText("");
            }
            
            @Override
            public void keyPressed(KeyEvent e) {
            }

            @Override
            public void keyReleased(KeyEvent e) {
            }
        });
            
        jframe.add(jpanel);
        jframe.setVisible(true);
    }
    
    public static void main(String[] args) {
        new Test2();
    }
}

如果希望允许字母数超过A和B,可以执行以下操作:

1-在类中声明字符串:

private static String chars = "ABCDEFG12345";
2-使用此
keyTyped(KeyEvent e)
方法:

public void keyTyped(KeyEvent e) {
    char c = e.getKeyChar();
    if (chars.indexOf(c) != -1) // If chars contains the char
        print.setText(c + " was typed!");
    else print.setText("");
}
完整代码:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.*;

public class Test2 {
    private static String chars = "ABCDEFG12345";

    public Test2() {
        JFrame jframe = new JFrame();
        jframe.setSize(300,300);
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        JPanel jpanel= new JPanel();

        JLabel label = new JLabel("Enter your name:");
        JTextField nameField = new JTextField("");
        JTextArea print = new JTextArea("");

        jpanel.add(label);
        jpanel.add(nameField);
        jpanel.add(print);
    
        nameField.addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent e) {
                char c = e.getKeyChar();
                if (chars.indexOf(c) != -1) // If chars contains the char
                    print.setText(c + " was typed!");
                else print.setText("");
            }
            
            @Override
            public void keyPressed(KeyEvent e) {
            }

            @Override
            public void keyReleased(KeyEvent e) {
            }
        });
            
        jframe.add(jpanel);
        jframe.setVisible(true);
    }
    
    public static void main(String[] args) {
        new Test2();
    }
}

格式设置

语句之间有很大的垂直空间,不会增加可读性

打印字符

是否存在只打印字母A和B的特定业务案例?如果没有,只打印所有键入的字符会更干净:

@覆盖
public void keyTyped(KeyEvent e){
字符串语句=e.getKeyChar()+“已键入!”;
print.setText(语句);
系统输出打印LN(报表);
}
或者,您可以提供一些支票,以便只打印信件:

@覆盖
public void keyTyped(KeyEvent e){
char-typedCharacter=e.getKeyChar();
if(字符.isAlphabetic(类型字符)){
字符串语句=e.getKeyChar()+“已键入!”;
print.setText(语句);
系统输出打印LN(报表);
}
}
覆盖

您应该为您重写的每个方法添加
@Override
注释。它

命名

Test2类的名称很差。问名字或类似的事情会更好

TODO自动生成的方法存根

它并没有向读者提供任何有用的信息。应该删除它

更正版本

以下是我将如何纠正这一点:

公共类主{
公共静态void main(字符串[]args){
新名称询问器().ask();
}
}
类名称查询器{
无效询问(){
JFrame JFrame=新JFrame();
jframe.setSize(300300);
jframe.setDefaultCloseOperation(jframe.EXIT_ON_CLOSE);
JPanel JPanel=新的JPanel();
添加(新的JLabel(“输入您的姓名:”);
JTextField nameField=新的JTextField(“”);
jpanel.add(名称字段);
JTextArea打印=新的JTextArea(“”);
jpanel.add(打印);
nameField.addKeyListener(新的KeyListener(){
@凌驾
public void keyTyped(KeyEvent e){
char-typedCharacter=e.getKeyChar();
if(字符.isAlphabetic(类型字符)){
字符串语句=e.getKeyChar()+“已键入!”;
print.setText(语句);
系统输出打印LN(报表);
}
}
@凌驾
public void键按下(KeyEvent e){}
@凌驾
public void keyReleased(KeyEvent e){}
});
jframe.add(jpanel);
jframe.setVisible(true);
}
}

格式设置

语句之间有很大的垂直空间,不会增加可读性

打印字符

是否存在只打印字母A和B的特定业务案例?如果没有,只打印所有键入的字符会更干净:

@覆盖
public void keyTyped(KeyEvent e){
字符串语句=e.getKeyChar()+“已键入!”;
print.setText(语句);
系统输出打印LN(报表);
}
或者,您可以提供一些支票,以便只打印信件:

@覆盖
public void keyTyped(KeyEvent e){
char-typedCharacter=e.getKeyChar();
if(字符.isAlphabetic(类型字符)){
字符串语句=e.getKeyChar()+“已键入!”;
print.setText(语句);
系统输出打印LN(报表);
}
}
覆盖

您应该为您重写的每个方法添加
@Override
注释。它

命名

Test2类的名称很差。问名字或类似的事情会更好

TODO自动生成的方法存根

它并没有向读者提供任何有用的信息。应该删除它

更正版本

以下是我将如何纠正这一点:

公共类主{
公共静态void main(字符串[]args){
新名称询问器().ask();
}
}
类名称查询器{
无效询问(){
JFrame JFrame=新JFrame();
jframe.setSize(300300);
jframe.setDefaultCloseOperation(jframe.EXIT_ON_CLOSE);
JPanel JPanel=新的JPanel();
添加(新的JLabel(“输入您的姓名:”);
JTextField nameField=新的JTextField(“”);
jpanel.add(名称字段);
JTextArea打印=新的JTextArea(“”);
jpanel.add(打印);
nameField.addKeyListener(新的KeyListener(){
@凌驾
public void keyTyped(KeyEvent e){
char-typedCharacter=e.getKeyChar();
if(字符.isAlphabetic(类型字符)){
字符串语句=e.getKeyChar()+“已键入!”;
print.setText(语句);
系统输出打印LN(报表);
}
}
@凌驾
public void键按下(KeyEvent e){}
@凌驾
公共空间