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)