2015-09-25 100 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