Java 从JTable获取每行值
我在Java 从JTable获取每行值,java,swing,jtable,Java,Swing,Jtable,我在JTable中显示数据库值,我想得到每一行的值。我尝试了addListSelectionListener,但是我得到了空指针异常,下面是我的源代码,哪里出了问题 public class mainFrame extends javax.swing.JFrame { static JTable table; static Connection connection; static Statement statement; static JTable jTable1; static int c
JTable
中显示数据库值,我想得到每一行的值。我尝试了addListSelectionListener
,但是我得到了空指针异常,下面是我的源代码,哪里出了问题
public class mainFrame extends javax.swing.JFrame {
static JTable table;
static Connection connection;
static Statement statement;
static JTable jTable1;
static int count;
static String r;
static DefaultTableModel model;
public mainFrame() {
super();
initComponents();
setLocation(500, 180);
try {
//----------database
final String queryCheck = "SELECT count(*) from test";
final PreparedStatement ps = connection.prepareStatement(queryCheck);
// ps.setString(1, name);
final ResultSet resultSet = ps.executeQuery();
if (resultSet.next()) {
count = resultSet.getInt(1);
System.out.println(count);
}
String read = "select * from test";
ResultSet rs = statement.executeQuery(read);
Object[][] data = new String[count][2];
int i = 0;
while (rs.next()) {
for (int c = 0; c < 2; c++) {
data[i][c] = rs.getString("namexcel");
}
i++;
}
String[] headers = {"Name"};
model = new DefaultTableModel(data, headers);
jTable2.setModel(model);
ListSelectionModel s = jTable2.getSelectionModel();
s.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
s.addListSelectionListener(new RowListener(this));
// pack();
} catch (Exception e) {
}
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() { //..
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try {
String link = jTextField1.getText();
System.out.println("" + link + "");
jTextField1.setText("");
File f = new File("" + link + "");
if (!f.exists()) {
JOptionPane.showMessageDialog(null, "File Doesnt Exist....!!");
mainFrame frame = new mainFrame();
frame.invalidate();
frame.validate();
// frame.revalidate();
} else {
FileInputStream file = new FileInputStream(f);
XSSFWorkbook workbook = new XSSFWorkbook(file);
String name = workbook.getSheetName(0);
System.out.println("----" + name);
final String queryCheck = "SELECT count(*) from test WHERE namexcel = ?";
final PreparedStatement ps = connection.prepareStatement(queryCheck);
ps.setString(1, name);
final ResultSet resultSet = ps.executeQuery();
if (resultSet.next()) {
final int count = resultSet.getInt(1);
if (count == 0) {
JOptionPane.showMessageDialog(null, "thank you");
statement.executeUpdate("insert into test (namexcel) values('" + name + "')");
DefaultTableModel model = (DefaultTableModel) jTable2.getModel();
Vector newRow = new Vector();
newRow.add(name);
Object[][] data1 = {{name},};
model.addRow(newRow);
} else {
JOptionPane.showMessageDialog(null, "Name Already exist please select diffrent name of excel");
}
}
}
} catch (Exception r) {
}
}
public static void main(String args[]) throws Exception {
Class.forName("org.sqlite.JDBC");
connection = null;
connection = DriverManager.getConnection("jdbc:sqlite:excel.db");
statement = connection.createStatement();
statement.executeUpdate("CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY , namexcel string)");
}
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
public static javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTable jTable2;
private javax.swing.JTextField jTextField1;
}
class RowListener implements ListSelectionListener {
mainFrame readRow;
JTable table;
public RowListener(mainFrame rar) {
readRow = rar;
table = readRow.table;
}
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
ListSelectionModel model = table.getSelectionModel();
int lead = model.getLeadSelectionIndex();
displayRowValues(lead);
}
}
private void displayRowValues(int rowIndex) {
int columns = table.getColumnCount();
String s = "";
for (int col = 0; col < columns; col++) {
Object o = table.getValueAt(rowIndex, col);
s += o.toString();
if (col < columns - 1) {
s += ", ";
}
}
System.out.println(s);
}
}
公共类大型机扩展了javax.swing.JFrame{
静态JTable表;
静态连接;
静态语句;
静态jTable1;
静态整数计数;
静态字符串r;
静态模型;
公共主机(){
超级();
初始化组件();
设定位置(500180);
试一试{
//----------数据库
最终字符串queryCheck=“从测试中选择计数(*)”;
最终准备的报表ps=连接。准备的报表(查询检查);
//ps.setString(1,名称);
最终结果集ResultSet=ps.executeQuery();
if(resultSet.next()){
count=resultSet.getInt(1);
系统输出打印项次(计数);
}
String read=“从测试中选择*”;
ResultSet rs=语句.executeQuery(读取);
对象[][]数据=新字符串[计数][2];
int i=0;
while(rs.next()){
对于(int c=0;c<2;c++){
数据[i][c]=rs.getString(“namexcel”);
}
i++;
}
字符串[]头={“名称”};
模型=新的DefaultTableModel(数据、标题);
jTable2.setModel(model);
ListSelectionModels=jTable2.getSelectionModel();
s、 设置选择模式(ListSelectionModel.单选);
s、 addListSelectionListener(新建行Listener(this));
//包装();
}捕获(例外e){
}
}
@抑制警告(“未选中”)
//
私有void initComponents(){/。。
包装();
}//
私有void jButton1ActionPerformed(java.awt.event.ActionEvent evt){
试一试{
String link=jTextField1.getText();
System.out.println(“+link+”);
jTextField1.setText(“”);
文件f=新文件(“+link+”);
如果(!f.exists()){
showMessageDialog(null,“文件不存在…”!!”;
大型机框架=新的大型机();
frame.invalidate();
frame.validate();
//frame.revalidate();
}否则{
FileInputStream文件=新的FileInputStream(f);
XSSF工作簿=新XSSF工作簿(文件);
字符串名称=工作簿。getSheetName(0);
System.out.println(“---”+名称);
最终字符串queryCheck=“从测试中选择count(*),其中namexcel=?”;
最终准备的报表ps=连接。准备的报表(查询检查);
ps.setString(1,名称);
最终结果集ResultSet=ps.executeQuery();
if(resultSet.next()){
最终整数计数=resultSet.getInt(1);
如果(计数=0){
showMessageDialog(null,“谢谢”);
executeUpdate(“插入测试(namexcel)值(““+name+”)”);
DefaultTableModel=(DefaultTableModel)jTable2.getModel();
向量newRow=新向量();
newRow.add(名称);
对象[][]数据1={{name},};
model.addRow(newRow);
}否则{
JOptionPane.showMessageDialog(空,“名称已存在,请选择excel的不同名称”);
}
}
}
}捕获(异常r){
}
}
公共静态void main(字符串args[])引发异常{
Class.forName(“org.sqlite.JDBC”);
连接=空;
connection=DriverManager.getConnection(“jdbc:sqlite:excel.db”);
statement=connection.createStatement();
语句.executeUpdate(“如果不存在则创建表测试(id INTEGER主键,namexcel字符串)”;
}
私有javax.swing.JButton jButton1;
私有javax.swing.JLabel jLabel1;
私有javax.swing.JPanel jPanel1;
公共静态javax.swing.JScrollPane-jScrollPane2;
私有javax.swing.JTable jTable2;
私有javax.swing.JTextField jTextField1;
}
类RowListener实现ListSelectionListener{
主机读取行;
JTable表;
公共行侦听器(大型机rar){
readRow=rar;
table=readRow.table;
}
public void值已更改(ListSelectionEvent e){
如果(!e.getValueIsAdjusting()){
ListSelectionModel=table.getSelectionModel();
int lead=model.getLeadSelectionIndex();
显示行值(lead);
}
}
私有void displayRowValues(int-rowIndex){
int columns=table.getColumnCount();
字符串s=“”;
for(int col=0;col
如果您的TableModel是DefaultTableModel,则可以使用getDataVector并查找所需的行
JTable table;
TableModel tModel=table.getModel();
int columnCount=tModel.getColumnCount();
int rowNumber;//you will have to know this
Object[] row=new Object[columnCount];
//Loop through the model and get the values by tModel.getValueAt(row,column);