由於代碼,基本上工作,我必須承擔的問題與我無法複製的應用程序的其他部分,如數據庫管理,例如...
但是......
你的資源管理是不存在的...數據庫Statement
有背景和有使得它,一旦你已經完成了它的工作的查詢有直接的關係,你應該確保你關閉它,例如...
public static Connection createDatabaseConnection() throws SQLException, ClassNotFoundException {
//...
System.out.println("Database Connected...");
try (Statement statement = c.createStatement()) {
count = statement.executeUpdate("CREATE TABLE VAULT (Expenses VARCHAR(5000), ExpensesType VARCHAR(5000), PaymentType VARCHAR(5000), Amount VARCHAR(10), Date VARCHAR(5000))");
System.out.println("Table Created...");
}
try (Statement statement = c.createStatement()) {
ResultSet res = statement.executeQuery("SELECT * FROM VAULT");
while (res.next()) {
String[] row = {res.getString("Expenses"), res.getString("ExpensesType"), res.getString("PaymentType"), res.getString("Amount"), res.getString("Date")};
System.out.print(res.getString("Expenses"));
System.out.print(res.getString("ExpensesType"));
System.out.print(res.getString("PaymentType"));
System.out.print(res.getString("Amount"));
System.out.print(res.getString("Date"));
GUI.tableModel.addRow(row);
}
}
和...
String updateStatement = "INSERT INTO VAULT"
+ " (Expenses, ExpensesType, PaymentType, Amount, Date)"
+ " VALUES (\'" + expenses + "\',\'" + expensesType + "\',\'" + paymentType + "\',\'" + amount + "\',\'" + date + "\')";
try (Statement statement = c.createStatement()) {
System.out.print(updateStatement);
int c = statement.executeUpdate(updateStatement);
count = count + c;
System.out.println("Data Inserted in to Database...");
} catch (Exception ex) {
ex.printStackTrace();
}
這將確保一旦你離開try
部分,該資源將被自動關閉。
你也應該考慮利用PreparedStatement
S,看到Using Prepared Statements瞭解更多詳情。
在你actionPerformed
方法,這...
table.setModel(tableModel);
令人擔憂。該模型已經設置,當你設置的UI,你不應該需要重新設置它,除非你已經創建新模型或表,你做既不...
和...
tableModel.fireTableDataChanged();
table.updateUI();
不應該這樣做。你不應該從外部調用模型的任何通知方法,這些都應該由它自己的模型來處理(並且在DefaultTableModel
的情況下)。
updateUI
無關與「更新UI的狀態」,並可能是你可以用最有效的方法。一個簡單的事實,即你已經觸發了更新(儘管fireTableDataChanged
也是你可以使用的最有效的方法之一)。
直接讓tableModel.addRow
,讓模型和表做休息。
您的工作流程是有點過。在確定已將數據添加到數據庫後,您不應該將該行添加到表中,如果插入由於某種原因失敗會發生什麼情況?
你真的,真的,真的應該學會利用對話框,請How to Make Dialogs更多的細節,而不是拋出,但是,在用戶的另一幀...
static
是不是你的朋友,相信這可能會「看起來」讓生活更輕鬆,「它只是一個快速的{什麼都不會}」,但任何時候都不好......但是,而不知道你是否正在更新屏幕上的實際內容。
「但如何類X參考分量Y?」 - 在大多數情況下,它不應該。我要麼返回一個值/該容器類可以應付或應通過使用某種模式或觀察者模式的通信值...
如果你要剝去窗框,可要實現允許我拖動它的功能,因爲它是我的個人控制,調整它,否則你的用戶不會喜歡你
避免使用null
佈局,像素完美的佈局是在現代UI設計中的錯覺。影響組件的個體大小的因素太多,其中沒有一個可以控制。搖擺設計爲核心與佈局管理工作,丟棄這些會導致沒有問題,問題是,你將花費更多的時間,試圖結束整頓
詳情參見Why is it frowned upon to use a null layout in Swing?和Laying Out Components Within a Container ...
你有什麼錯誤嗎? – 2014-09-26 04:33:09
不應該有任何需要調用'fireTableDataChanged',這應該是自動錶模型本身做和不應該被外部調用。考慮提供一個[可運行的示例](https://stackoverflow.com/help/mcve),它可以證明你的問題。這將導致更少的混亂和更好的反應 – MadProgrammer 2014-09-26 04:36:57
@getlost我沒有收到任何錯誤都 – 2014-09-26 04:38:35