введите строку через JOptionPane с символьным ограничением - PullRequest
1 голос
/ 26 октября 2019

Я хочу ввести строку через JOptionPane, но с ограничением символов. Как мне это сделать?

public class LineType { 
    String line[] = new String[80];  

    void get() {
       line = JOptionPane.showInputDialog(null,"Enter Line (80 characters max):");
    }
}

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

Вы можете отобразить любой компонент Swing в панели JOptionPane, чтобы вы могли настроить ввод с помощью собственной метки и текстового поля:

JTextField line = new JTextField(10);
Object[] msg = {"Enter Line (80 characters max):", line};

int result = JOptionPane.showConfirmDialog(
    null,
    msg,
    "Enter ...",
    JOptionPane.OK_CANCEL_OPTION,
    JOptionPane.PLAIN_MESSAGE);

System.out.println("You entered: " + line.getText());

Однако у вас все еще будут две проблемы:

  1. Вы должны быть в состоянии ограничить количество символов. Чтобы решить эту проблему, вы можете добавить DocumentFilter в текстовое поле. Прочитайте раздел из учебника по Swing по Реализация DocumentFilter для рабочего примера, который делает именно то, что вы хотите.

  2. Когда отобразится панель параметров, фокус будетна кнопке, а не в текстовом поле. Чтобы исправить это, отметьте Dialog Focus , который позволит вам фокусироваться на текстовом поле при отображении панели параметров. Этот класс добавляет AncestorListener к текстовому полю, что позволит текстовому полю запрашивать фокус при отображении панели параметров.

0 голосов
/ 26 октября 2019

То, что вы могли бы сделать, это выполнить некоторые проверки ввода от пользователя, чтобы убедиться, что они введены в ваших пределах.

public class LineType { 
    String line = "";  

    void get() {
       line = JOptionPane.showInputDialog(null,"Enter Line (80 characters max):");
       if (line != null) { // user clicked OK and entered something?
           if (line.length() > 80) {
               // ask the user to re-enter text or something else you'd like to do here
           }
       }
    }
}
...