我用SWING做了一個介面,先用條件從數據庫篩選出資料傳入ShowTable當中,表頭有該Table的所有Column的欄位。現在我要點選此Table當中的某一列,要如何把此列的所有明細回傳到表頭勒?我上網查的結果,是有看到這一個Code,是寫在宣告Table當中JTable tbBook = new JTable(){
public void valueChanged(ListSelectionEvent e){
super.valueChanged(e);
//呼叫基礎類別的valueChanged()方法,
//否則選取動作無法正常執行
int selRow = tbBook.getSelectedRow();
//取得表格目前的選取列
//若沒有選取列則終止執行方法
if(selRow == -1) return;
//將選取列的資料, 依序設定給文字欄
for(int i = 0; i < tfInput.length; i++){
tfInput[i].setText(
dtmBook.getValueAt(selRow, i).toString());
}
}
};底下是我原始的CODE,我試過放在網路上講的地方,但是都沒獲取TABLE當中的資料傳回表頭。因此請教各位大大應該要如何寫...public class SampleSystemMainFrame extends javax.swing.JFrame {
AbstractTableModel TableModel;
Vector tDetail;
int SelRow;
String[] tTitle =new String [] {
"客戶代號", "樣品製單", "紙板編號", "季節", "GROUP","NAME","COLOR","接單日","開單日","楦頭編號","楦頭尺寸","結構","客戶要樣雙數","留底雙數","印刷尺寸","樣品種類","圖檔一","圖檔二","圖檔三","製造單備註","修改日期","客戶要樣日","實際完成日"
};
public SampleSystemMainFrame() {
tDetail = new Vector(); //設定TableModel的內容
TableModel = new AbstractTableModel(){
public int getColumnCount(){
return tTitle.length;}
public int getRowCount(){
return tDetail.size();}
public Object getValueAt(int row,int column){
if(!tDetail.isEmpty())
return
((Vector)tDetail.elementAt(row)).elementAt(column);
else
return null;}
public String getColumnName(int column){
return tTitle[column];}
public void setValueAt(Object value,int row,int column){}
public Class getColumnClass(int c){
return getValueAt(0,c).getClass();
}
public boolean isCellEditable(int row,int column){
return false;}};
initComponents();
ShowTable =new JTable(TableModel);
ShowTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
}private void alldataActionPerformed(java.awt.event.ActionEvent evt) {
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
java.sql.Connection conn = java.sql.DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=shoedata","sa","84368493");
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from sample_head");
tDetail.removeAllElements();
TableModel.fireTableStructureChanged();
while(rs.next()){
Vector rec_tDetail =new Vector();
for(int i=1;i<=tTitle.length;i++)
rec_tDetail.addElement(rs.getString(i));
tDetail.addElement(rec_tDetail);
}
TableModel.fireTableStructureChanged();
stmt.close();
conn.close();
}catch (Exception ex) {
Logger.getLogger(SampleSystemMainFrame.class.getName()).log(Level.SEVERE, null, ex);
ex.printStackTrace();}
}
public void valueChanged(ListSelectionEvent e){
super.valueChanged(e);
//呼叫基礎類別的valueChanged()方法,
//否則選取動作無法正常執行
int selRow = tbBook.getSelectedRow();
//取得表格目前的選取列
//若沒有選取列則終止執行方法
if(selRow == -1) return;
//將選取列的資料, 依序設定給文字欄
for(int i = 0; i < tfInput.length; i++){
tfInput[i].setText(
dtmBook.getValueAt(selRow, i).toString());
}
}
};底下是我原始的CODE,我試過放在網路上講的地方,但是都沒獲取TABLE當中的資料傳回表頭。因此請教各位大大應該要如何寫...public class SampleSystemMainFrame extends javax.swing.JFrame {
AbstractTableModel TableModel;
Vector tDetail;
int SelRow;
String[] tTitle =new String [] {
"客戶代號", "樣品製單", "紙板編號", "季節", "GROUP","NAME","COLOR","接單日","開單日","楦頭編號","楦頭尺寸","結構","客戶要樣雙數","留底雙數","印刷尺寸","樣品種類","圖檔一","圖檔二","圖檔三","製造單備註","修改日期","客戶要樣日","實際完成日"
};
public SampleSystemMainFrame() {
tDetail = new Vector(); //設定TableModel的內容
TableModel = new AbstractTableModel(){
public int getColumnCount(){
return tTitle.length;}
public int getRowCount(){
return tDetail.size();}
public Object getValueAt(int row,int column){
if(!tDetail.isEmpty())
return
((Vector)tDetail.elementAt(row)).elementAt(column);
else
return null;}
public String getColumnName(int column){
return tTitle[column];}
public void setValueAt(Object value,int row,int column){}
public Class getColumnClass(int c){
return getValueAt(0,c).getClass();
}
public boolean isCellEditable(int row,int column){
return false;}};
initComponents();
ShowTable =new JTable(TableModel);
ShowTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
}private void alldataActionPerformed(java.awt.event.ActionEvent evt) {
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
java.sql.Connection conn = java.sql.DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=shoedata","sa","84368493");
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from sample_head");
tDetail.removeAllElements();
TableModel.fireTableStructureChanged();
while(rs.next()){
Vector rec_tDetail =new Vector();
for(int i=1;i<=tTitle.length;i++)
rec_tDetail.addElement(rs.getString(i));
tDetail.addElement(rec_tDetail);
}
TableModel.fireTableStructureChanged();
stmt.close();
conn.close();
}catch (Exception ex) {
Logger.getLogger(SampleSystemMainFrame.class.getName()).log(Level.SEVERE, null, ex);
ex.printStackTrace();}
}
楼主【handsomebob】截止到2008-07-23 16:54:20的历史汇总数据(不包括此帖):
发帖的总数量:1 发帖的总分数:0 每贴平均分数:0
回帖的总数量:0 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:0 结贴的总分数:0
无满意结贴数:0 无满意结贴分:0
未结的帖子数:1 未结的总分数:0
结贴的百分比:0.00 % 结分的百分比:---------------------
无满意结贴率:---------------------无满意结分率:---------------------
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
網路上看到的這個CODEJTable tbBook = new JTable(){
public void valueChanged(ListSelectionEvent e){
super.valueChanged(e);
//呼叫基礎類別的valueChanged()方法,
//否則選取動作無法正常執行
int selRow = tbBook.getSelectedRow();
//取得表格目前的選取列
//若沒有選取列則終止執行方法
if(selRow == -1) return;
//將選取列的資料, 依序設定給文字欄
for(int i = 0; i < tfInput.length; i++){
tfInput[i].setText(
dtmBook.getValueAt(selRow, i).toString());
}
}
};我把 //將選取列的資料, 依序設定給文字欄改成底下這樣,一樣沒反應。所以是不是我的表格沒有做到Listener?javax.swing.JOptionPane.showMessageDialog(null,"Test!");