Java 将新数据加载到现有JTable后,getSelectedRow()返回-1
我正在编写一个简单的Java 将新数据加载到现有JTable后,getSelectedRow()返回-1,java,mysql,swing,jtable,listselectionlistener,Java,Mysql,Swing,Jtable,Listselectionlistener,我正在编写一个简单的MySQL编辑器。我的问题是,在从组合框中选择数据库中的一个新表并加载它,然后选择一行并尝试删除它之后,getSelectedRow()返回-1并生成一个异常,但当我从程序开始时加载的表中删除一行时,不会发生这种情况 以下是来自2个文件的关键代码部分(在同一代码引用中): 包omnisql; 导入java.sql.*; 导入java.util.*; 公共类getData { 静态连接c=新连接(); 静态GUI g=新GUI(); 静态结果集结果; 公共静态向量数据=新向量(
MySQL
编辑器。我的问题是,在从组合框中选择数据库中的一个新表并加载它,然后选择一行并尝试删除它之后,getSelectedRow()
返回-1并生成一个异常,但当我从程序开始时加载的表中删除一行时,不会发生这种情况
以下是来自2个文件的关键代码部分(在同一代码引用中):
包omnisql;
导入java.sql.*;
导入java.util.*;
公共类getData
{
静态连接c=新连接();
静态GUI g=新GUI();
静态结果集结果;
公共静态向量数据=新向量();
公共静态字符串table=“pracownicy”;
公共静态向量d;
公共静态列表id;
void getData()引发SQLException
{
结果=c.stmt.executeQuery(“从”+表中选择*);
id=新的ArrayList();
while(result.next())
{
d=新向量();
id.add(result.getString(“id”);
d、 添加(result.getString(“id”);
d、 添加(result.getString(“Nazwisko”);
d、 添加(result.getString(“Imię”);
d、 添加(result.getString(“Płeć”);
d、 添加(result.getString(“Ulica”);
d、 添加(result.getString(“Miejscowość”);
d、 添加(result.getString(“Kod_pocztowy”);
d、 add(result.getString(“Województwo”);
d、 添加(result.getString(“Telefon”);
数据.添加(d);
}
}
}
包omnisql;
导入java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.*;
导入java.sql.PreparedStatement;
导入java.sql.ResultSet;
导入java.sql.SQLException;
导入javax.swing.*;
导入javax.swing.table.*;
导入java.util.*;
导入javax.swing.event.*;
公共类GUI扩展JFrame实现ActionListener、TableModelListener
{
静态连接c=新连接();
静态getData gd=newgetdata();
JPanel面板=新的JPanel(新的FlowLayout(FlowLayout.LEFT,10,5));
JPanel panel1=新的JPanel(新的FlowLayout(FlowLayout.LEFT,10,5));
JPanel panel2=新的JPanel(新的FlowLayout(FlowLayout.CENTER,10,5));
JPanel panel3=新的JPanel(新的FlowLayout(FlowLayout.LEFT,10,5));
JLabel typbazy=新JLabel(“Typ bazy:”);
JLabel wybtab=新JLabel(“Wybierz tabelę:”);
JRadioButton postgre=新的JRadioButton(“PostgreSQL”);
JRadioButton mysql=新的JRadioButton(“mysql”);
JRadioButton sqlite=新的JRadioButton(“sqlite”);
ButtonGroup grupa=新建ButtonGroup();
public static JComboBox tabela=new JComboBox();
JButton addrec=新JButton(“Dodaj rekord”);
JButton delrec=新JButton(“Usuńrekord”);
JButton reftab=新JButton(“Odświeżtabelę”);
JTable表;
公共静态模型;
表列;
向量头=新向量();
JScrollPane滚动条;
静态int rownumber、addrow、delrow、updaterow;
编制报表pst;
字符串值=”;
公共静态整数高度,i,第一行=0,klick=1;
公共图形用户界面()
{
面板。添加(典型);
grupa.add(postgre);
面板。添加(postgre);
postgre.addActionListener(此);
grupa.add(mysql);
panel.add(mysql);
setSelected(rootPaneCheckingEnabled);
addActionListener(this);
grupa.add(sqlite);
panel.add(sqlite);
addActionListener(this);
面板1.添加(wybtab);
面板1.添加(表A);
表1.setPreferredSize(新尺寸(120,20));
tabela.setBackground(颜色:白色);
tabela.removeAllItems();
表A.增补项(“”);
附加术语表(“Pracownicy”);
表A.增补(“Pracownicy 2”);
表1.setSelectedIndex(0);
tabela.addActionListener(这个);
标题。添加(“ID”);
标题。添加(“纳兹维斯科”);
标题。添加(“Imię”);
标题。添加(“Płeć”);
标题。添加(“Ulica”);
标题。添加(“Miejscowość”);
标题。添加(“Kod_pocztowy”);
标题。添加(“Województwo”);
标题。添加(“Telefon”);
模型=新的DefaultTableModel(gd.data,标题);
表=新JTable(型号);
table.setRowSelectionAllowed(真);
table.getModel().addTableModelListener(此);
表.setPreferredScrollableViewportSize(新维度(740159));
column=table.getColumnModel().getColumn(0);
列。设置首选宽度(20);
column=table.getColumnModel().getColumn(1);
列。设置首选宽度(100);
column=table.getColumnModel().getColumn(2);
列。设置首选宽度(70);
column=table.getColumnModel().getColumn(3);
列。设置首选宽度(70);
column=table.getColumnModel().getColumn(4);
列。设置首选宽度(100);
column=table.getColumnModel().getColumn(5);
列。设置首选宽度(100);
column=table.getColumnModel().getColumn(6);
列。设置首选宽度(100);
column=table.getColumnModel().getColumn(7);
列。设置首选宽度(100);
column=table.getColumnModel().getColumn(8);
列。设置首选宽度(80);
滚动=新的JScrollPane(表格);
面板2.添加(滚动);
面板3.添加(addrec);
addrec.addActionListener(此);
小组3.添加(delrec);
delrec.addActionListener(此);
面板3.添加(参考选项卡);
reftab.addActionListener(此);
getContentPane().setLayout(新的BoxLayout(getContentPane(),BoxLayout.Y_轴));
getContentPane().add(面板);
getContentPane().add(panel1);
getContentPane().add(panel2);
getContentPane().add(panel3);
}
void initGUI()
{
设置大小(800340);
setTitle(“OmniSQL 1.0”);
可设置大小(假);
setVisible(真);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
公共作废表已更改(TableModelEvent e)
{
rownumber=table.getSelectedRow();
如果(rownumber==-1)rownumber=0;
updaterow=Integer.parseInt(gd.id.get(rownumber));
开关(如getType())
{
案例TableModelEvent.UPDATE:
table.getRowCount();
value=table.getValueAt(table.getSelectedRow(),table.getSelectedColumn()).toStr
package omnisql;
import java.sql.*;
import java.util.*;
public class getData
{
static Connect c = new Connect();
static GUI g = new GUI();
static ResultSet result;
public static Vector<Vector<String>> data = new Vector<Vector<String>>();
public static String table="pracownicy";
public static Vector <String> d;
public static List <String> id;
void getData() throws SQLException
{
result=c.stmt.executeQuery("select * from "+table);
id = new ArrayList<String>();
while(result.next())
{
d=new Vector<String>();
id.add(result.getString("id"));
d.add(result.getString("id"));
d.add(result.getString("Nazwisko"));
d.add(result.getString("Imię"));
d.add(result.getString("Płeć"));
d.add(result.getString("Ulica"));
d.add(result.getString("Miejscowość"));
d.add(result.getString("Kod_pocztowy"));
d.add(result.getString("Województwo"));
d.add(result.getString("Telefon"));
data.add(d);
}
}
}
package omnisql;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.*;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.*;
import javax.swing.table.*;
import java.util.*;
import javax.swing.event.*;
public class GUI extends JFrame implements ActionListener, TableModelListener
{
static Connect c = new Connect();
static getData gd = new getData();
JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT,10,5));
JPanel panel1 = new JPanel(new FlowLayout(FlowLayout.LEFT,10,5));
JPanel panel2 = new JPanel(new FlowLayout(FlowLayout.CENTER,10,5));
JPanel panel3 = new JPanel(new FlowLayout(FlowLayout.LEFT,10,5));
JLabel typbazy = new JLabel("Typ bazy: ");
JLabel wybtab = new JLabel("Wybierz tabelę: ");
JRadioButton postgre = new JRadioButton("PostgreSQL");
JRadioButton mysql = new JRadioButton("MySQL");
JRadioButton sqlite = new JRadioButton("SQLite");
ButtonGroup grupa = new ButtonGroup();
public static JComboBox tabela = new JComboBox();
JButton addrec = new JButton("Dodaj rekord");
JButton delrec = new JButton("Usuń rekord");
JButton reftab = new JButton("Odśwież tabelę");
JTable table;
public static DefaultTableModel model;
TableColumn column;
Vector<String> headers = new Vector<String>();
JScrollPane scroll;
static int rownumber,addrow,delrow,updaterow;
PreparedStatement pst;
String value="";
public static int height,i,firstrow=0, klick=1;
public GUI()
{
panel.add(typbazy);
grupa.add(postgre);
panel.add(postgre);
postgre.addActionListener(this);
grupa.add(mysql);
panel.add(mysql);
mysql.setSelected(rootPaneCheckingEnabled);
mysql.addActionListener(this);
grupa.add(sqlite);
panel.add(sqlite);
sqlite.addActionListener(this);
panel1.add(wybtab);
panel1.add(tabela);
tabela.setPreferredSize(new Dimension(120,20));
tabela.setBackground(Color.white);
tabela.removeAllItems();
tabela.addItem(" ");
tabela.addItem("Pracownicy");
tabela.addItem("Pracownicy 2");
tabela.setSelectedIndex(0);
tabela.addActionListener(this);
headers.add("ID");
headers.add("Nazwisko");
headers.add("Imię");
headers.add("Płeć");
headers.add("Ulica");
headers.add("Miejscowość");
headers.add("Kod_pocztowy");
headers.add("Województwo");
headers.add("Telefon");
model = new DefaultTableModel(gd.data, headers);
table = new JTable(model);
table.setRowSelectionAllowed(true);
table.getModel().addTableModelListener(this);
table.setPreferredScrollableViewportSize(new Dimension(740,159));
column = table.getColumnModel().getColumn(0);
column.setPreferredWidth(20);
column = table.getColumnModel().getColumn(1);
column.setPreferredWidth(100);
column = table.getColumnModel().getColumn(2);
column.setPreferredWidth(70);
column = table.getColumnModel().getColumn(3);
column.setPreferredWidth(70);
column = table.getColumnModel().getColumn(4);
column.setPreferredWidth(100);
column = table.getColumnModel().getColumn(5);
column.setPreferredWidth(100);
column = table.getColumnModel().getColumn(6);
column.setPreferredWidth(100);
column = table.getColumnModel().getColumn(7);
column.setPreferredWidth(100);
column = table.getColumnModel().getColumn(8);
column.setPreferredWidth(80);
scroll = new JScrollPane(table);
panel2.add(scroll);
panel3.add(addrec);
addrec.addActionListener(this);
panel3.add(delrec);
delrec.addActionListener(this);
panel3.add(reftab);
reftab.addActionListener(this);
getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
getContentPane().add(panel);
getContentPane().add(panel1);
getContentPane().add(panel2);
getContentPane().add(panel3);
}
void initGUI()
{
setSize(800,340);
setTitle("OmniSQL 1.0");
setResizable(false);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void tableChanged(TableModelEvent e)
{
rownumber = table.getSelectedRow();
if (rownumber==-1) rownumber=0;
updaterow = Integer.parseInt(gd.id.get(rownumber));
switch (e.getType())
{
case TableModelEvent.UPDATE:
table.getRowCount();
value=table.getValueAt(table.getSelectedRow(),table.getSelectedColumn()).toString();
try
{
pst = c.con.prepareStatement("UPDATE "+gd.table+" SET "+table.getColumnName(table.getSelectedColumn())+" = '"+value+"' where id = "+updaterow+";");
pst.executeUpdate();
}
catch (SQLException err)
{
}
break;
}
}
public void actionPerformed(ActionEvent e)
{
/*if (e.getActionCommand().equals("MySQL"))
{
try
{
c.con.close();
c.connect("jdbc:mysql://localhost:3306/omnisql","root","sqlek","com.mysql.jdbc.Driver");
}
catch (ClassNotFoundException er)
{
}
catch(SQLException err)
{
}
}*/
if (tabela.getSelectedItem()=="Pracownicy")
{
gd.table="pracownicy";
try
{
model.setRowCount(0);
table.removeAll();
gd.getData();
}
catch (SQLException er)
{
}
}
if (tabela.getSelectedItem()=="Pracownicy 2")
{
gd.table="pracownicy2";
try
{
model.setRowCount(0);
gd.getData();
table.revalidate();
}
catch (SQLException er)
{
}
}
/*if(postgre.isSelected())
{
tabela.removeAllItems();
tabela.addItem("Adresy");
tabela.addItem("Adresy 2");
tabela.setSelectedIndex(0);
}
*/
/*if(mysql.isSelected())
{
tabela.removeAllItems();
tabela.addItem(" ");
tabela.addItem("Pracownicy");
tabela.addItem("Pracownicy 2");
}*/
/*
if(sqlite.isSelected())
{
tabela.removeAllItems();
tabela.addItem("Zakłady");
tabela.addItem("Zakłady 2");
tabela.setSelectedIndex(0);
}*/
if (e.getActionCommand().equals("Dodaj rekord"))
{
model.setRowCount(gd.id.size());
rownumber = model.getRowCount()-1;
if(rownumber==-1 && gd.id.size()==0)
{
rownumber=0;
gd.id.add(0, "1");
addrow=Integer.parseInt(gd.id.get(rownumber));
}
else
{
addrow=Integer.parseInt(gd.id.get(rownumber));
addrow++;
}
try
{
pst = c.con.prepareStatement("INSERT INTO "+gd.table+" (id) VALUES("+addrow+")");
pst.executeUpdate();
model.setRowCount(0);
gd.getData();
height = (int)table.getPreferredSize().getHeight();
table.scrollRectToVisible(new Rectangle(0,height,10,10));
}
catch (SQLException exc)
{
}
}
rownumber=table.getSelectedRow();
if (e.getActionCommand().equals("Usuń rekord"))
{
try
{
model.setRowCount(gd.id.size());
System.out.println(rownumber);
delrow = Integer.parseInt(gd.id.get(rownumber));
pst = c.con.prepareStatement("DELETE from "+gd.table+" where id="+delrow);
pst.executeUpdate();
model.setRowCount(0);
gd.getData();
}
catch (SQLException exc)
{
}
}
if (e.getActionCommand().equals("Odśwież tabelę"))
{
try
{
model.setRowCount(0);
gd.getData();
}
catch (SQLException exc)
{
}
}
}
}