2015-09-25 107 views
0

我试图在JTable中显示来自我的字符串数组(创建的方法)的结果 - 但它似乎不工作。JAVA-用SQL中的2d字符串数组填充JTable

代码方法(只粘贴前两个):

package t3.isprojekt.uppg2.dal; 

    import java.sql.*; 
    import java.util.*; 

    public class DAL { 

     private static String connStr = "jdbc:sqlserver://Localhost:1433;databases=CronusDB;user=root;password=root;"; 

     public static Connection getConn() throws SQLException { 
      return DriverManager.getConnection(connStr); 
     } 

     // ------ Methods for Employee & related tables ------\\ 

     public String[][] getEmpData() throws SQLException { 
      String getEmp = "SELECT [No_], [First Name], [Last Name], [Address], [City] FROM [CRONUS Sverige AB$Employee];"; 
      Statement stmt = null; 
      stmt = getConn().createStatement(); 
      ResultSet rset = stmt.executeQuery(getEmp); 
      ResultSetMetaData rsetMeta = rset.getMetaData(); 
      int colCount = rsetMeta.getColumnCount(); 
      int rowCount = 0; 
      while (rset.next()) { 
       rowCount = rset.getRow(); 
      } 
      String[][] temp = convertRsToArray(rset, rowCount, colCount); 
      return temp; 
     } 

     public String[][] getEmployeeMetaData() throws SQLException { 
      String empMetaData = "SELECT TABLE_CATALOG, TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM [CronusDB].[INFORMATION_SCHEMA].[COLUMNS]"; 
      Statement stmt = null; 
      stmt = getConn().createStatement(); 
      ResultSet rset = stmt.executeQuery(empMetaData); 
      ResultSetMetaData rsetMeta = rset.getMetaData(); 
      int colCount = rsetMeta.getColumnCount(); 
      int rowCount = 0; 
      while (rset.next()) { 
       rowCount = rset.getRow(); 
      } 
      String[][] temp = convertRsToArray(rset, rowCount, colCount); 
      return temp; 
     } 

GUI类 - 在这里,我不知道如何将模型连接到字符串数组。试图谷歌,但没有恢复到什么,我想实现的任何信息:

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.sql.SQLException; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.border.EmptyBorder; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.table.TableModel; 

import t3.isprojekt.uppg2.controller.Controller; 
import t3.isprojekt.uppg2.dal.DAL; 
import javax.swing.JButton; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class View extends JFrame { 

    private JPanel contentPane; 
    private Controller ctrl; 
    private DefaultTableModel tableModel = new DefaultTableModel(new Object[][] { ctrl.getEmployeeData() }, 
      new Object[] { ctrl.getEmpMetaData() }); 
    private JTable table_2; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        View frame = new View(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the frame. 
    * 
    * @throws SQLException 
    */ 
    public View() throws SQLException { 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 450, 300); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(null); 

     JTable table = new JTable(tableModel); 
     table.setBounds(0, 65, 432, 188); 
     contentPane.add(table_2); 

     JScrollPane scrollPane = new JScrollPane(); 
     scrollPane.setBounds(0, 247, 432, -175); 
     contentPane.add(scrollPane); 

    } 
} 

回答

1

我想,你有你的代码一个简单的拼写错误。您致电:

enterJTable table = new JTable(tableModel); 

而不是增加table到,但你的contentPane您的加入table_2其在它没有数据:

 private JTable table_2; 

    ... 

    contentPane.add(table_2); 

是它甚至initialiset了吗?我瞎了吗?

我想应该是这样的:

contentPane.add(table); 

另外,如果我没有忽视你的东西是table_2死代码。

编辑:

分别是控制器类,是它实例化?

Controller ctrl; 

... 

new DefaultTableModel(new Object[][] { **ctrl.getEmployeeData()** }, 
      new Object[] { **ctrl.getEmpMetaData()** }); 

我不能帮你进一步,如果我不能看到你的方法做什么。 也许,只是猜测,是否还有另一个错字?你想拨打:

DAL dal = new DAL() 

... 

new DefaultTableModel(new Object[][] { **dal.getEmployeeData()** }, 
      new Object[] { **dal.getEmpMetaData()** }); 

如果这是你不能做到这一点的情况下:

new DefaultTableModel(new Object[][] { ctrl.getEmployeeData() }, 
     **new Object[]** { dal.getEmpMetaData() }); 

因为getEmpMetaData()返回的String[][]代替String[]

最后但并非最不重要的,以在滚动窗格中显示您的Jtable请问他:

JScrollPane scrollPane = new JScrollPane(table); 

它的一个小的改动你的代码,但它的伎俩:P

+0

是的,这是一个错字,我的坏。但是当我试图在这个语句上运行它时,我得到了NullPointerException: ''private DefaultTableModel tableModel = new DefaultTableModel(new Object [] [] {ctrl.getEmployeeData()}, new Object [] {ctrl.getEmpMetaData()} );” ' – user2868900

+0

那么一个nullpointers意味着你应该调试你的代码。在线上做一个断点,你instanciate你的tableModel和看起来至极参数是null。 –

0

DefaultTableModel有以下这些构造

DefaultTableModel() 
DefaultTableModel(int rowCount, int columnCount) 
**DefaultTableModel(Object[][] data, Object[] columnNames)** 
DefaultTableModel(Object[] columnNames, int rowCount) 
DefaultTableModel(Vector columnNames, int rowCount) 
DefaultTableModel(Vector data, Vector columnNames) 

不能使用

Object[][] array
作为构造函数的第二个参数。 getEmployeeMetaData()正在返回一个二维字符串数组,其中构造函数可以接受一维数组。

而不是增加而且,你已经添加TABLE_2到contentPane。

JTable table = new JTable(tableModel); 
table.setBounds(0, 65, 432, 188); 
contentPane.add(table_2); 

我假设,你正试图添加JTable到ScrollPane。以下代码将帮助你做到这一点。

JTable table = new JTable(tableModel); 
JScrollPane scrollPane = new JScrollPane(table); 
scrollPane.setBounds(0, 65, 432, 188); 
contentPane.add(scrollPane); 

我也创建了一个示例数据集,以便您可以轻松实现它。

String [][] one = {{"SampleData01" , "SampleData02"}, 
        {"SampleData11" , "SampleData12"}}; 
String [] two = {"SampleColumn1" , "SampleColumn2"}; 
private DefaultTableModel tableModel = new DefaultTableModel(one,two); 

如果通过我提到的更改运行代码,则输出将如此。 enter image description here

+0

您是否运行了编辑的代码?因为我看到一些其他的bug,比如调用cntr.method()而不是dal.method()。或者是Examble只是一个“它可能看起来像这样” –

+0

非常感谢您的回复!我的问题是,我希望应用程序从数组中自动获取行和列,然后填充表。 也许这是不可能的,所以我坐在这里对于如何让我的结果集进入可视化表格非常无知。 – user2868900

+0

@TomWellbrock对不起,有点晚了。我没有运行代码。我刚刚举了一个如何解决问题的例子。 – sifho