[英]JAVA - Populate JTable with 2d String array from SQL
我正在嘗試在JTable中顯示我的String數組(創建的方法)的結果-但似乎無法正常工作。
方法代碼(僅粘貼前兩個):
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類-這里我不知道如何將模型連接到String數組。 嘗試谷歌,但沒有任何返回任何信息,以我想要達到的目的:
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);
}
}
我想您的代碼中有一個簡單的錯字。 您致電:
enterJTable table = new JTable(tableModel);
但是不是將table
添加到contentPane
而是添加了其中沒有數據的table_2
:
private JTable table_2;
...
contentPane.add(table_2);
甚至還初始化嗎? 我是盲人嗎?
我認為它應該像這樣:
contentPane.add(table);
另外,如果我沒有忽略任何內容,則table_2
是無效代碼。
編輯:
您的Controller類是實例嗎?
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
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()返回一個二維String數組,構造函數可以在其中接受一維數組。
而不是添加table ,而是將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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.