2013-02-18 48 views
1

我正在使用NetBeans中的java swing。我在表單中有一個jtable,它將使用來自mysql數據庫的值填充。表格根據用戶選擇的表動態地動態更改。我在最後添加了一列複選框。現在無論顯示哪個表,我只通過覆蓋可編輯的最後一列進行編輯。基於Jtable的事件觸發器中的Jcheckbox值

所以現在複選框的列是可​​編輯的。我想讓其餘列的蜜蜂可編輯,當該行對應的複選框被簽入時,我想讓該行不可編輯一旦複選框被檢出!

我需要幫助來完成這項任務。如果需要其他細節請問。

在此先感謝。

+0

'「如果需要的話請不要問任何其他細節......」':是的,你嘗試過什麼到目前爲止,它是如何工作的? – 2013-02-18 22:08:34

+0

我想知道如何編輯isCellEditable(row,col)函數,以便在選擇複選框時行可以編輯,並在取消選擇複選框時變爲不可編輯。如果有任何鏈接或代碼用於偵聽複選框選擇事件,然後根據複選框列的布爾值觸發使單元格可編輯和可識別的操作,將會有所幫助。 – user2083089 2013-02-19 02:13:11

+0

你不會找到完全回答你的問題的教程,但你會找到處理你的問題的各個方面的教程,這將是你的工作,將所有這些綜合在一起。查看使用TableModelListener並監聽模型的更改。確定更改的位置和類型。如果它是複選框列的布爾變化,那麼讓模型更改'isCellEditable(...)'返回的適當行和列的值。 – 2013-02-19 02:33:37

回答

1

Kleopatra當然是對的 - 不需要聽衆。您所需要做的就是讓模型檢查感興趣的行最後一列所保存的布爾值,並將其作爲isCellEditable()值返回。

例如:

@SuppressWarnings("serial") 
class MyTableModel extends DefaultTableModel { 
    public static final String SELECT = "select"; 
    String tablename; 

    public MyTableModel(Object[][] rowData, Object[] columnNames, String tableName) { 
     super(rowData, columnNames); 
     this.tablename = tableName; 
    } 

    @Override 
    public Class<?> getColumnClass(int columnIndex) { 
     if (getColumnName(columnIndex).equalsIgnoreCase(SELECT)) { 
     return Boolean.class; 
     } 
     return super.getColumnClass(columnIndex); 
    } 

    @Override 
    public boolean isCellEditable(int row, int col) { 
     if (col == getColumnCount() - 1) 
     return true; 
     else 
     return ((Boolean) getValueAt(row, getColumnCount() - 1)).booleanValue(); 
    } 

} 

可與測試:

import javax.swing.*; 
import javax.swing.table.*; 

public class TestBoolTableModel { 
    public static final Integer[][] DATA = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, 
     { 9, 10, 11, 12 }, { 13, 14, 15, 16 } }; 
    public static final String[] COL_NAMES = { "One", "Two", "Three", "Four", 
     MyTableModel.SELECT }; 

    private static void createAndShowGui() { 
     Object[][] rowData = new Object[DATA.length][]; 
     for (int i = 0; i < rowData.length; i++) { 
     rowData[i] = new Object[DATA[i].length + 1]; 
     for (int j = 0; j < DATA[i].length; j++) { 
      rowData[i][j] = DATA[i][j]; 
     } 
     rowData[i][DATA[i].length] = Boolean.FALSE; 
     } 
     MyTableModel tableModel = new MyTableModel(rowData, COL_NAMES, "My Table"); 

     JTable table = new JTable(tableModel); 
     JScrollPane scrollPane = new JScrollPane(table); 

     JFrame frame = new JFrame("TestBoolTableModel"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(scrollPane); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 
+0

謝謝雙方..它現在正在工作!!我非常感謝你們倆..再次感謝 – user2083089 2013-02-26 04:55:22

+0

@ user2083089:不客氣。感謝您回覆我們。 – 2013-02-26 13:44:50