简体   繁体   English

使用 DbUtils 将 ResultSet 转换为 TableModel 后,JTable 将设置为可编辑。 如何让它再次不可编辑?

[英]JTable will set to editable after converting ResultSet to TableModel with DbUtils. How to make it non-editable again?

Here is My Code for doing this`这是我执行此操作的代码`

public static void addSong(String[] fileDetail, JTable SongData_Table)
{
    try {
        con = DBConnection.getCon();
        stmt = con.createStatement();

        stmt.executeUpdate("insert into songs values (null,'" + fileDetail[0] + "', '" + fileDetail[1] + "',null,null)");
        ResultSet rs = stmt.executeQuery("select * from songs");

        TableModel model = DbUtils.resultSetToTableModel(rs);
        SongData_Table.setModel(model);

        if (con != null) {
            stmt.close();
            con.close();
        }
    } catch (SQLException e) {
        System.out.println("Error in Stmt " + e);
    }
}

In DbUtils.resultSetToTableModel , replaceDbUtils.resultSetToTableModel ,替换

return new DefaultTableModel(rows, columnNames);

and return a TableModel that overrides isCellEditable() :并返回一个覆盖isCellEditable()TableModel

return new DefaultTableModel(rows, columnNames){

    @Override
    public boolean isCellEditable(int row, int column) {
        return false;
    }
};

Variable names should NOT start with an upper case character.变量名不应以大写字符开头。 SongData_Table should be songDataTable . SongData_Table应该是songDataTable

Override the isCellEditable(...) method of the JTable, instead of the TableModel.覆盖 JTable 的isCellEditable(...)方法,而不是 TableModel。

JTable songDataTable = new JTable()
{
    @Override boolean isCellEditatable(int row, int column)
    {
        return false;
    }
};

You could override the method isCellEditable:您可以覆盖方法 isCellEditable:

 //instance table model
  DefaultTableModel tableModel = new DefaultTableModel() {

  @Override
  public boolean isCellEditable(int row, int column) {
   //all cells false
   return false;
   }
 };

  table.setModel(tableModel);

or....或者....

  table.setEnabled(false);

using Vector Convert ResultSet to TableModel instead:使用 Vector Convert ResultSet to TableModel 代替:

.......    
Vector column = new Vector();
column.addElement("Columnname1");
column.addElement("Columnname2");
column.addElement("Columnname3");
........
//data Vector
Vector data = new Vector();
while (rs.next()) {
Vector temp = new Vector();
temp.addElement(rs.getString(1));
temp.addElement(rs.getString(2));
 temp.addElement(rs.getString(3));
  ........      
data.addElement(temp);
}
//append to JTable
yourtable.setModel(new javax.swing.table.DefaultTableModel(data,column){

@Override
public boolean isCellEditable(int row, int column) {
   return false;
}
});
......

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM