java.lang.StringIndexOutOfBoundsException尝试使用jTextField进行筛选

java.lang.StringIndexOutOfBoundsException尝试使用jTextField进行筛选,java,swing,Java,Swing,我提出了一种方法,帮助我用我在jTextField中写入的内容过滤jTable中的行。问题是,当我尝试在jTextField中写入超过8个字母时,它会抛出一个名为 Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 9 at java.lang.String.substring(String.java:1907) at java.l

我提出了一种方法,帮助我用我在
jTextField
中写入的内容过滤
jTable
中的行。问题是,当我尝试在
jTextField
中写入超过8个字母时,它会抛出一个名为

Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 9
at java.lang.String.substring(String.java:1907) at java.lang.String.substring(String.java:1907)
at vocaciones.test_consulta.filtrar(test_consulta.java:338)
at vocaciones.test_consulta.jTextField1KeyTyped(test_consulta.java:350)
at vocaciones.test_consulta.access$000(test_consulta.java:21)
at vocaciones.test_consulta$1.keyTyped(test_consulta.java:79)
at java.awt.Component.processKeyEvent(Component.java:6460)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2828)
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)
这就是方法

private void jTextField1KeyTyped(java.awt.event.KeyEvent evt) {                                     
    String text = jTextField1.getText().toUpperCase();
    jTextField1.setText(text);

    String selArt, desBd;
    String desBD = jTextField1.getText();

    int cdes = desBD.length();
    int row = 0;

    for (int i = 0; i < jTable1.getRowCount(); i++) {
        selArt = (String) jTable1.getValueAt(i, 1);
        desBd = selArt.substring(0, cdes);

        if(desBd.equalsIgnoreCase(desBD.toUpperCase())){
            row = i;
            i = jTable1.getRowCount()+1;
        }
    } 

    jTable1.changeSelection(row, 2, false, false );
    jTable1.setSelectionBackground(Color.DARK_GRAY);
}
private void jTextField1KeyTyped(java.awt.event.KeyEvent evt){
String text=jTextField1.getText().toUpperCase();
jTextField1.setText(文本);
弦塞拉特;
字符串desBD=jTextField1.getText();
int cdes=desBD.length();
int行=0;
对于(int i=0;i

我希望你能帮我解决这个问题,提前谢谢你

您得到了这个异常,因为
cdes>selArt.length()
。检查
cdes
值,然后将其用于
substring
方法

if(cdes <= selArt.length()){
  desBd = selArt.substring(0, cdes);
}

if(cdes这是一个简单的问题,只需通过打印
jTable1.getRowCount()


for(inti=0;i让我们检查您的
异常

Exception in thread "AWT-EventQueue-0" 
java.lang.StringIndexOutOfBoundsException: String index out of range: 9<-----(1)
at java.lang.String.substring(String.java:1907) at  <------(2)
线程“AWT-EventQueue-0”中出现异常
java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:9lengthOfString'selArt'

检查selArt的长度,看看它是否在CDEssems的范围内,如
selArt
的长度取决于我写的第一个字母,因为它会过滤jTable行,并只显示以该字母开头的行和长度是由第一行上的信息定义的……事实上,
stArt
的长度定义了它的最大长度,这似乎是它得到的第一件事。我尝试在
jTable
上使用不同的数据,长度改变了。
Exception in thread "AWT-EventQueue-0" 
java.lang.StringIndexOutOfBoundsException: String index out of range: 9<-----(1)
at java.lang.String.substring(String.java:1907) at  <------(2)