限制每个 JTextArea 行上的字符数

Limit number of character on every JTextArea line

我在 JDialog 中有一个 JTextAreaJDialog 使用 GridLayout.

我想在 JTextArea 的每一行上有 7 位数字(每行将是一个 7 int 注册号)。出于用户体验的原因,我希望 JTextArea 添加新行或在一行达到 7 个字符时停止扩展。

无效的事情: - 在 JTextArea 构造函数中指定列数 - matriculesText.setLineWrap(true);matriculesText.setWrapStyleWord(true);

恐怕 uploadDialogManager.setHgap(20); 可能会破坏密码。我想知道 JDialog 是否应该有一个固定的大小。

这就是我构建 JDialog 的方式:

// initialization
    Dialog uploadParent = null;
    JDialog uploadDialog = new JDialog(uploadParent);
    GridLayout uploadDialogManager = new GridLayout(UPLOAD_DIALOG_ROWS, 
UPLOAD_DIALOG_COLUMNS);

    // uploadDialog properties
    uploadDialog.setSize(new Dimension(UPLOAD_DIALOG_WIDTH, UPLOAD_DIALOG_HEIGHT));
    uploadDialog.setLayout(uploadDialogManager);
    uploadDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

    //Set up the horizontal gap value
    uploadDialogManager.setHgap(20);
    //Set up the vertical gap value
    uploadDialogManager.setVgap(20);
    //Set up the layout of the buttons
    //uploadDialogManager.layoutContainer();

    // components initialization
    JLabel exerciceLabel = new JLabel("exercice number : ");
    JComboBox<Integer> exerciceNumbers = new JComboBox<Integer> 
  (EXERCICE_NUMBERS);
    JLabel matriculeLabel = new JLabel("please enter your matricules, one per 
  line : ");
    JTextArea matriculesText = new JTextArea(1, 1);
    JButton confirm = new JButton("confirm");
    JButton cancel = new JButton("cancel");

    matriculesText.setLineWrap(true);
    matriculesText.setWrapStyleWord(true);

我做了另一个满足我要求的解决方案。当达到 7 个字符时,我没有换行,而是使用 MATRICULE_REGEX 检查每一行是否包含 7 个数字 (1\d{6})。如果没有,我拒绝 JTextArea 内容。

    private static final String MATRICULE_REGEX = "1\d{6}(\n1\d{6})*";

    Pattern matriculePattern = Pattern.compile(MATRICULE_REGEX);
    Matcher matriculeMatcher = null;
    matriculeMatcher = matriculePattern.matcher(text);
    isValidMatricule = matriculeMatcher.matches();