У меня возникли проблемы с настройкой всплывающего окна моего JComboBox в Java 17. Я разрабатываю свое приложение с помощью windowsBuilder и хочу, чтобы всплывающее окно обновлялось, пока пользователь вставляет или удаляет текст, отображая только те элементы, которые соответствуют принципу текста, введенного пользователем. Если строка пуста, всплывающее окно устанавливается в исходное меню, во всех случаях меню видно. для этого я пытаюсь изменить модель с помощью метода setModel() в моем поле со списком в DocumentListener в интерне jTextField JcomboBox (я вызвал редактор), но появляется исключение:
"Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Attempt to mutate in notification"
Сначала я подумал поискать в руководствах моего профессора, но там нет примеров динамического JcomboBox. Кроме того, я искал на других форумах, и даже на этом единственное, что мне удалось сделать, это попробовать его с MutableComboBoxModel, который я не смог загрузить в Java даже с помощью сочетания клавиш Ctrl + Shift + O (я использую Eclipse). Я пробовал смотреть видео на YouTube, но ничего подобного нет. Я бы предпочел, чтобы вы помогли мне с этим, пожалуйста, я использую Windows 11,
Ниже приведен код, он находится в документеprov.java.
Следы ошибки и код следующие (я получаю ошибку, либо нажимаю на JcomboBox и редактирую ComboBox):
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: A t t e m p t t o m u t a t e i n n o t i f i c a t i o n < b r / > a t j a v a . d e s k t o p / j a v a x . s w i n g . t e x t . A b s t r a c t D o c u m e n t . w r i t e L o c k ( A b s t r a c t D o c u m e n t . j a v a : 1 3 7 2 ) < b r / > a t j a v a . d e s k t o p / j a v a x . s w i n g . t e x t . A b s t r a c t D o c u m e n t . r e p l a c e ( A b s t r a c t D o c u m e n t . j a v a : 6 8 8 ) < b r / > a t j a v a . d e s k t o p / j a v a x . s w i n g . t e x t . J T e x t C o m p o n e n t . s e t T e x t ( J T e x t C o m p o n e n t . j a v a : 1 7 2 5 ) < b r / > a t j a v a . d e s k t o p / j a v a x . s w i n g . p l a f . m e t a l . M e t a l C o m b o B o x E d i t o r $ 1 . s e t T e x t ( M e t a l C o m b o B o x E d i t o r . j a v a : 6 3 ) < b r / > a t j a v a . d e s k t o p / j a v a x . s w i n g . p l a f . b a s i c . B a s i c C o m b o B o x E d i t o r . s e t I t e m ( B a s i c C o m b o B o x E d i t o r . j a v a : 9 3 ) < b r / > a t j a v a . d e s k t o p / j a v a x . s w i n g . J C o m b o B o x . c o n f i g u r e E d i t o r ( J C o m b o B o x . j a v a : 1 4 3 9 ) < b r / > a t j a v a . d e s k t o p / j a v a x . s w i n g . p l a f . b a s i c . B a s i c C o m b o B o x U I $ H a n d l e r . p r o p e r t y C h a n g e ( B a s i c C o m b o B o x U I . j a v a : 1 8 1 2 ) < b r / > a t j a v a . d e s k t o p / j a v a x . s w i n g . p l a f . b a s i c . B a s i c C o m b o B o x U I $ P r o p ertyChangeHandler.propertyChange(BasicComboBoxUI.java:704)
at java.desktop/javax.swing.plaf.metal.MetalComboBoxUI$MetalPropertyChangeListener.propertyChange(MetalComboBoxUI.java:224)
at java.desktop/java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:343)
at java.desktop/java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:335)
at java.desktop/java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:268)
at java.desktop/java.awt.Component.firePropertyChange(Component.java:8717)
at java.desktop/javax.swing.JComboBox.setModel(JComboBox.java:362)
at cfgs.prove$3.removeUpdate(prove.java:136)
at java.desktop/javax.swing.text.AbstractDocument.fireRemoveUpdate(AbstractDocument.java:285)
at java.desktop/javax.swing.text.AbstractDocument.handleRemove(AbstractDocument.java:652)
at java.desktop/javax.swing.text.AbstractDocument.remove(AbstractDocument.java:620)
at java.desktop/javax.swing.text.AbstractDocument.replace(AbstractDocument.java:696)
at java.desktop/javax.swing.text.JTextComponent.setText(JTextComponent.java:1725)
at java.desktop/javax.swing.plaf.metal.MetalComboBoxEditor$1.setText(MetalComboBoxEditor.java:63)
at cfgs.prove$4.mousePressed(prove.java:156)
at java.desktop/java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:288)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6618)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3398)
at java.desktop/java.awt.Component.processEvent(Component.java:6386)
at java.desktop/java.awt.Container.processEvent(Container.java:2266)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4996)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4828)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4572)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4828)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:775)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:98)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:747)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:744)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
package cfgs;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Font;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.regex.Pattern;
import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;
public class prove extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel contentPane;
protected JComboBox comboBox;
protected static String[] usuarios = {"James", "Ana", "Andres", "Maria", "John", "gustavo"};
protected static DefaultComboBoxModel comb;
public static String[] FiltrarUsuarios(String str) {
int i = 1, N = usuarios.length;
ArrayList filtrados = new ArrayList();
Pattern filtro = Pattern.compile("^"+str+".*"); //coincide con lo que empieza con este string (str).
comb = new DefaultComboBoxModel(usuarios);
String elemento;
String[] retorno;
while (i