Прочтите раздел из учебника по Swing на Остановка автоматического закрытия диалога .
Показывает, как вы можете редактировать введенный текст и не допускать закрытия диалогового окна, если не введены правильные данные.
Edit:
Вы можете попробовать получить доступ к текстовому полю панели параметров:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class OptionPaneInput2
{
private static void createAndShowGUI()
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setLocationRelativeTo( null );
frame.setVisible( true );
JTextField label = new JTextField("How old are you?");
label.addAncestorListener( new AncestorListener()
{
@Override
public void ancestorAdded(AncestorEvent e)
{
Component component = e.getComponent();
Container parent = component.getParent();
JTextField textField = (JTextField)parent.getComponent(1);
System.out.println("added");
}
@Override
public void ancestorMoved(AncestorEvent e) {}
@Override
public void ancestorRemoved(AncestorEvent e) {}
});
// Simple text field for input:
String age = JOptionPane.showInputDialog(
frame,
label);
frame.dispose();
}
public static void main(String[] args)
{
SwingUtilities.invokeLater( () -> createAndShowGUI() );
/*
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
*/
}
}
Указав сообщение как JLabel, вы можете получать уведомления, когда метка добавляется в диалоговое окно, а затем вы можете получить доступ к текстовому полю ввода и добавить DocumentFilter
к Document
текстового поля и выполнить необходимые действия. редактирования.
См. Учебник Swing по Реализация DocumentFilter , чтобы узнать фильтр, ограничивающий количество отображаемых символов.
Если это все еще слишком креативно для вас, я бы посоветовал вам просто создать свой собственный JDialog. Это действительно лучший подход.