Итак, я хотел проверить имя пользователя (длина должна быть от 6 до 30 символов, числа не должны допускаться), которое пользователь ввел до продолжения игры, и я поискал inte rnet и узнал о регулярном выражении выражения. Я не привык к этому, поэтому обнаружил некоторые проблемы. Код должен делать следующее: если пользователь не ввел имя пользователя или если оно содержало символы, запрещенные при нажатии кнопки «начать игру», я хотел, чтобы диалоговое окно появилось и попросило его повторить попытку. И если все было правильно, игра должна продолжаться как обычно, но когда я запускаю этот код, имя пользователя не проверяется, и он входит в игру, несмотря на то, что было введено в текстовое поле, а ниже - то, что у меня есть до сих пор.
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.ActionEvent;
import java.util.regex.*;
public class StartScreen extends JFrame {
private JPanel contentPane;
private JTextField textbox_name;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
StartScreen frame = new StartScreen();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public static boolean isValidUsername(String name)
{
String regex = "^[a-zA-Z]{5,29}$"; //Removed ^[aA-zZ]\\\\w{5,29}$
Pattern p = Pattern.compile(regex);
if (name == null) {
return false;
}
Matcher m = p.matcher(name);
return m.matches();
}
public StartScreen() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 455, 191);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel lblEnterName = new JLabel("Enter Name:");
lblEnterName.setFont(new Font("Lucida Grande", Font.PLAIN, 15));
lblEnterName.setBounds(91, 48, 102, 29);
contentPane.add(lblEnterName);
textbox_name = new JTextField();
textbox_name.setBounds(205, 49, 130, 28);
contentPane.add(textbox_name);
textbox_name.setColumns(10);
String field;
field = textbox_name.getText();
JButton btnStartGame = new JButton("Start Game");
btnStartGame.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(isValidUsername(field)) {
MainScreen window = new MainScreen();
window.setVisible(true);
dispose();
}
else {
JOptionPane.showMessageDialog(null, "Please enter your username correctly");
}
}
});
btnStartGame.setBounds(150, 102, 117, 29);
contentPane.add(btnStartGame);
}
}