Java jList valueChanged事件将所选索引设置为-1
我正在尝试操作本地sqlite数据库中的数据。我有一个Java jList valueChanged事件将所选索引设置为-1,java,swing,sqlite,indexoutofboundsexception,jlist,Java,Swing,Sqlite,Indexoutofboundsexception,Jlist,我正在尝试操作本地sqlite数据库中的数据。我有一个jList组件,它从数据库中获取数据 首先我定义一个DefaultListModel,然后用addElement方法在其中添加数据。然后我设置jList.setModel('model')。。在我从数据库添加或删除数据之后,jList将被聚焦,它将触发valueChanged事件并设置selectedItemIndex=-1 它输出 线程“AWT-EventQueue-0”java.lang.ArrayIndexOutOfBoundsExce
jList
组件,它从数据库中获取数据
首先我定义一个DefaultListModel
,然后用addElement方法在其中添加数据。然后我设置jList.setModel('model')
。。在我从数据库添加或删除数据之后,jList
将被聚焦,它将触发valueChanged事件并设置selectedItemIndex=-1
它输出
线程“AWT-EventQueue-0”java.lang.ArrayIndexOutOfBoundsException中出现异常:-1
位于java.util.ArrayList.elementData(ArrayList.java:418)
获取(ArrayList.java:431)
notdefteri.notdefteri.listBaslikValueChanged(notdefteri.java:75)
在notdefteri.notdefteri.access$100(notdefteri.java:20)
notdefteri.notdefteri$2.valueChanged(notdefteri.java:125)
在javax.swing.JList.fireSelectionValueChanged(JList.java:1796)
javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1810)
位于javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:184)
位于javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:164)
位于javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:211)
位于javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:405)
位于javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:415)
位于javax.swing.DefaultListSelectionModel.removeSelectionIntervalImpl(DefaultListSelectionModel.java:576)
在javax.swing.DefaultListSelectionModel.clearSelection中(DefaultListSelectionModel.java:420)
位于javax.swing.JList.clearSelection(JList.java:2043)
位于javax.swing.JList.setModel(JList.java:1677)
notdefteri.notdefteri.notlariBaslat(notdefteri.java:55)
notdefteri.notdefteri.listBaslikMouseClicked(notdefteri.java:292)
在notdefteri.notdefteri.access$000(notdefteri.java:20)
notdefteri.notdefteri$1.mouseClicked(notdefteri.java:120)
在java.awt.AWTEventMulticaster.mouseClicked处(AWTEventMulticaster.java:270)
位于java.awt.Component.ProcessMouseeEvent(Component.java:6538)
位于javax.swing.JComponent.ProcessMouseeEvent(JComponent.java:3324)
位于java.awt.Component.processEvent(Component.java:6300)
位于java.awt.Container.processEvent(Container.java:2236)
位于java.awt.Component.dispatchEventImpl(Component.java:4891)
位于java.awt.Container.dispatchEventImpl(Container.java:2294)
位于java.awt.Component.dispatchEvent(Component.java:4713)
位于java.awt.LightweightDispatcher.RetargetMouseeEvent(Container.java:4888)
位于java.awt.LightweightDispatcher.ProcessMouseeEvent(Container.java:4534)
位于java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
位于java.awt.Container.dispatchEventImpl(Container.java:2280)
位于java.awt.Component.dispatchEvent(Component.java:4713)
位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
在java.awt.EventQueue.access$500(EventQueue.java:97)
在java.awt.EventQueue$3.run(EventQueue.java:709)
在java.awt.EventQueue$3.run(EventQueue.java:703)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
位于java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
在java.awt.EventQueue$4.run(EventQueue.java:731)
在java.awt.EventQueue$4.run(EventQueue.java:729)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
位于java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
在java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)中
位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:105)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
在java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
它一直在工作,但我不知道为什么
这是我的代码:
package notdefteri;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListModel;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class NotDefteri extends javax.swing.JFrame {
/**
* Creates new form NotDefteri
*/
SQLiteFunctions sqlf = new SQLiteFunctions();
ResultSet rs;
String textAreaSituation = "";
int selectedListIndex;
ArrayList<Not> siraliNotlar;
int guncelIndex;
public NotDefteri() {
initComponents();
notlariBaslat();
}
public void notlariBaslat() {
DefaultListModel<String> notBasliklari = new DefaultListModel<>();
siraliNotlar = new ArrayList();
rs = sqlf.notlariGetir();
try {
while (rs.next()) {
notBasliklari.addElement(rs.getString("baslik"));
Not siraliNot = new Not(rs.getInt("id"), rs.getString("baslik"), rs.getString("not"));
siraliNotlar.add(siraliNot);
}
listBaslik.setModel(notBasliklari);
listBaslik.setSelectedIndex(0);
} catch (SQLException ex) {
Logger.getLogger(NotDefteri.class.getName()).log(Level.SEVERE, null, ex);
}
}
;
private void listBaslikValueChanged(javax.swing.event.ListSelectionEvent evt) {
// TODO add your handling code here:
if (!evt.getValueIsAdjusting()) {//This line prevents double events
selectedListIndex = listBaslik.getSelectedIndex();
**//It crashes on this line**
Not not = siraliNotlar.get(selectedListIndex);
try {
rs = sqlf.notGetir(not.getDbId());
txtAreaNot.setText(rs.getString("not"));
lblTarih.setText("Tarih : " + rs.getString("tarih"));
} catch (SQLException ex) {
Logger.getLogger(NotDefteri.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
package notdefteri;
导入java.sql.ResultSet;
导入java.sql.SQLException;
导入java.text.simpleDataFormat;
导入java.util.ArrayList;
导入java.util.Calendar;
导入java.util.Date;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入javax.swing.DefaultListModel;
导入javax.swing.JOptionPane;
导入javax.swing.SwingUtilities;
导入javax.swing.event.DocumentEvent;
导入javax.swing.event.DocumentListener;
公共类NotDefteri扩展了javax.swing.JFrame{
/**
*创建新表单NotDefteri
*/
SQLiteFunctions sqlf=新的SQLiteFunctions();
结果集rs;
字符串textareacement=“”;
int-selectedListIndex;
ArrayList siraliNotlar;
int-guncelIndex;
公共NotDefteri(){
初始化组件();
notlariBaslat();
}
公共无效notlariBaslat(){
DefaultListModel notBasliklari=新的DefaultListModel();
siraliNotlar=newarraylist();
rs=sqlf.notlariGetir();
试一试{
while(rs.next()){
notBasliklari.addElement(rs.getString(“baslik”);
Not siraliNot=新Not(rs.getInt(“id”)、rs.getString(“baslik”)、rs.getString(“Not”);
siraliNotlar.add(siraliNot);
}
listbasilik.setModel(notBasliklari);
listBaslik.setSelectedIndex(0);
}catch(SQLException-ex){
Logger.getLogger(NotDefteri.class.getName()).log(Level.SEVERE,null,ex);
}
}
;
私有void listBaslikValueChanged(javax.swing.event.ListSelectionEvent e