我做了一个方法,帮助我用jTable
中写的内容来过滤jTextField
的行,问题是当我尝试在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);
}
我希望你能帮助我解决这个问题并提前感谢!
答案 0 :(得分:0)
你有这个例外,因为cdes > selArt.length()
。检查cdes
值,然后在substring
方法上使用它。
if(cdes <= selArt.length()){
desBd = selArt.substring(0, cdes);
}
答案 1 :(得分:0)
这是一个简单的问题,只需打印jTable1.getValueAt(i, 1);
i=9
jTable1.getRowCount()
是否存在
for (int i = 0; i <= jTable1.getRowCount(); i++) {
i<=jTable1.getRowCount()
答案 2 :(得分:0)
让我们检查一下Exception
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)
StringIndexOutOfBoundException
您要获得的Exception
的姓名java.lang.String.substring(String.java:1907)
Exception
问题是当我尝试在jTextField中写入超过8个 它会引发一个名为...的错误
在desBd = selArt.substring(0, cdes);
的代码中cdec >8 say 9
生成异常,因为selArt
的长度为8。
int cdes = desBD.length();
所以cdec
来自JTextField
的{{1}} String
和您从selArt = (String) jTable1.getValueAt(i, 1);
所以要使用JTable
的{{1}}长度cdes
,String