Salve, ho un problema con il mio programma.. io uso Netbeans 8.0 e mi serve fare una ricerca evidenziando le parole in una jTable, filtrando così i prodotti inseriti all'interno. Utilizzo il metodo "fireDocumentChangeEvent", il problema è che quando l'user fa il login, entrando nella tab dei prodotti l'opzione ricerca funziona e si evidenzia solo la parola scritta in una jTextField, ma quando l'user non fa il login la ricerca va in tilt e quando scrivo la parola, le lettere sono a metà e appaiono spazi bianchi, mentre nella consolle si presenta tale errore:
Invece questa è la classe che utilizzo per la ricerca dei prodotti:codice:Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 39 >= 20 at java.util.Vector.elementAt(Vector.java:470) at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:650) at javax.swing.table.TableRowSorter$TableRowSorterModelWrapper.getValueAt(TableRowSorter.java:269) at javax.swing.table.TableRowSorter$TableRowSorterModelWrapper.getStringValueAt(TableRowSorter.java:285) at javax.swing.DefaultRowSorter$FilterEntry.getStringValue(DefaultRowSorter.java:1352) at javax.swing.RowFilter$RegexFilter.include(RowFilter.java:447) at javax.swing.RowFilter$GeneralFilter.include(RowFilter.java:421) at javax.swing.DefaultRowSorter.include(DefaultRowSorter.java:931) at javax.swing.DefaultRowSorter.initializeFilteredMapping(DefaultRowSorter.java:640) at javax.swing.DefaultRowSorter.sort(DefaultRowSorter.java:592) at javax.swing.DefaultRowSorter.setRowFilter(DefaultRowSorter.java:424) at cavonline_client.GUI.GUI_utente.utilities.RicercaProdotti.fireDocumentChangeEvent(RicercaProdotti.java:52) at cavonline_client.GUI.GUI_utente.HomeUtente$24.insertUpdate(HomeUtente.java:1173) at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:202) at javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:749) at javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:708) at javax.swing.text.PlainDocument.insertString(PlainDocument.java:130) at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:670) at javax.swing.text.JTextComponent.replaceSelection(JTextComponent.java:1379) at javax.swing.text.DefaultEditorKit$DefaultKeyTypedAction.actionPerformed(DefaultEditorKit.java:884) at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1664) at javax.swing.JComponent.processKeyBinding(JComponent.java:2878) at javax.swing.JComponent.processKeyBindings(JComponent.java:2925) at javax.swing.JComponent.processKeyEvent(JComponent.java:2841) at java.awt.Component.processEvent(Component.java:6282) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4861) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1895) at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:762) at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1027) at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:899) at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:727) at java.awt.Component.dispatchEventImpl(Component.java:4731) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Window.dispatchEventImpl(Window.java:2719) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735) at java.awt.EventQueue.access$200(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:694) at java.awt.EventQueue$3.run(EventQueue.java:692) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:708) at java.awt.EventQueue$4.run(EventQueue.java:706) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:705) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
codice:public class RicercaProdotti { protected static final Color WARNING_COLOR = new Color(255, 200, 200); public static HighlightTableCellRenderer renderer = new HighlightTableCellRenderer(); public final transient static TableRowSorter<? extends TableModel> sorter = new TableRowSorter<>(table3); //metodo per la ricerca public static void fireDocumentChangeEvent() { HomeUtente.ricerca.setBackground(Color.WHITE); String pattern = HomeUtente.ricerca.getText().trim(); if (pattern.isEmpty()) { sorter.setRowFilter(null); renderer.setPattern(""); } else if (renderer.setPattern(pattern)) { try { sorter.setRowFilter(RowFilter.regexFilter(pattern)); } catch (PatternSyntaxException ex) { System.err.println("Bad regex pattern"); } } } } class HighlightTableCellRenderer extends JTextField implements TableCellRenderer { private final Color BACKGROUND_SELECTION_COLOR = new Color(220, 240, 255); private final transient Highlighter.HighlightPainter highlightPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW); private String pattern = ""; private String prev; public boolean setPattern(String str) { if (str == null || str.equals(pattern)) { return false; } else { prev = pattern; pattern = str; return true; } } public HighlightTableCellRenderer() { super(); setOpaque(true); setBorder(BorderFactory.createEmptyBorder()); setForeground(Color.BLACK); setBackground(Color.WHITE); setEditable(false); } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { String txt = Objects.toString(value, ""); Highlighter highlighter = getHighlighter(); highlighter.removeAllHighlights(); setText(txt); setBackground(isSelected ? BACKGROUND_SELECTION_COLOR : Color.WHITE); if (pattern != null && !pattern.isEmpty() && !pattern.equals(prev)) { Matcher matcher = Pattern.compile(pattern).matcher(txt); if (matcher.find()) { int start = matcher.start(); int end = matcher.end(); try { highlighter.addHighlight(start, end, highlightPainter); } catch (BadLocationException | PatternSyntaxException e) { } } } return this; } }
Quando clicco sull'errore, la riga presa in considerazione è questa:
Grazie e spero possiate risolvere questo errorecodice:sorter.setRowFilter(RowFilter.regexFilter(pattern));![]()

Rispondi quotando
