1
這裏更換表的內容是一類與表的過程涉及filtering
與搜索
//類DbUtils
public class DbUtils {
public static TableModel resultSetToTableModel(ResultSet rs) {
try {
ResultSetMetaData metaData = rs.getMetaData();
int numberOfColumns = metaData.getColumnCount();
Vector columnNames = new Vector();
for (int column=0; column < numberOfColumns; column++) {
columnNames.addElement(metaData.getColumnLabel(column + 1));
}
Vector rows = new Vector();
while(rs.next()) {
Vector newRow = new Vector();
for (int i =1; i <= numberOfColumns; i++) {
newRow.addElement(rs.getObject(i));
}
rows.addElement(newRow);
}
return new DefaultTableModel(rows,columnNames);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
我有在更新了工作表的方法class Job_GUI,傳入的參數是sql statements
,其中填充了table_job
。傳入的sql語句取決於選擇哪個JTabbedPane
,並將index
值考慮在內。這是我的問題所在。
//類Job_GUI
public void UpdateJobTable(String sql) {
try {
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
table_job.setModel(DbUtils.resultSetToTableModel(rs));
table_job.getColumnModel().getColumn(0).setPreferredWidth(50);
table_job.getColumnModel().getColumn(1).setPreferredWidth(140);
table_job.getColumnModel().getColumn(2).setPreferredWidth(170);
table_job.getColumnModel().getColumn(3).setPreferredWidth(80);
table_job.getColumnModel().getColumn(4).setPreferredWidth(120);
}
catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
finally {
try {
pst.close();
rs.close();
} catch (Exception e) {
}
}
}
private void JobTabbedPaneStateChanged(javax.swing.event.ChangeEvent evt) {
JTabbedPane sourceTabbedPane = (JTabbedPane) evt.getSource();
int index = sourceTabbedPane.getSelectedIndex();
if (index == 0) {
jobTableInit();
}
else if (index == 1) {
fillCombo();
}
else if(index==2) {
try {
sql = "SELECT Job.jobID as 'Job ID', Employer.name as'Company', Job.title as 'Role', Job.description as 'Description', Job.type as 'Type', Job.benefits as 'Benefits', Job.closing as 'Closing Date' FROM Job INNER JOIN Employer ON Job.employerID=Employer.employerID ORDER BY Employer.name";
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
TableModel model = DbUtils.resultSetToTableModel(rs);
table_job.setModel(model);
final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
table_job.setRowSorter(sorter);
JScrollPane pane = new JScrollPane(table_job);
searchJob.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String text = keyword.getText();
if (text.length() == 0) {
sorter.setRowFilter(null);
} else {
sorter.setRowFilter(RowFilter.regexFilter(text));
}
}
});
}
catch (Exception e) {
e.printStackTrace();
}
}
當我在index 2
模式中,table_job
內容被抹去,即,要回索引0,表變空,而intially它是充滿數據。當我在索引2中時,我不希望table_job
爲空,而是仍然繼續顯示數據,除非在JTextField
中輸入了keyword
,請調整table_job
以搜索匹配項。但table_job沒有顯示任何內容。我在代碼片段中做了索引2的if block的錯誤,或許我在其他地方錯了?
,同時消除了'JScrollPane的窗格=新JScrollPane的(table_job);'使它工作,你的方法也工作:)。爲什麼我在桌上有重複的卷軸呢? – Hoody