2012-05-03 75 views
10

Tôi đã tạo một hàm tải dữ liệu vào JTable. Mọi thứ đều hoạt động tốt ngoại trừ tất cả các ô trong bảng này đều có thể chỉnh sửa được. Btw, tôi đã sử dụng defaultTableModel cho mô hình bảng. Im làm điều này trong Netbeans IDE. Hãy giúp tôi. Dưới đây là mã của tôi:Làm thế nào để tạo một jtable không thể chỉnh sửa trong java?

private void updateTable(String searchText){ 

    if(searchText != null) 
     this._sqlCmd = this._sqlCmd + " WHERE "+columnCombo.getSelectedItem()+" LIKE '%"+searchText+"%'"; 
    jTable1.setSurrendersFocusOnKeystroke(true); 
    table = (javax.swing.table.DefaultTableModel) jTable1.getModel(); 

    try{ 
     table.setRowCount(0); 
    }catch(Exception e){} 

    try { 
     ResultSet rs = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY).executeQuery(_sqlCmd); 
     while (rs.next()){ 
      Object[] data = new Object[numOfCols]; 
      for(int i=0; i<data.length; i++){ 
       data[i] = rs.getObject(i+1); 
      } 
      table.addRow(data); 
     } 
     table.fireTableDataChanged(); 


    } catch (SQLException ex) { 
     Logger.getLogger(FindContactGrid.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 
+0

Đây là mã cập nhật các mô hình dữ liệu. Thay vào đó, các ô có thể chỉnh sửa phải thực hiện với JTable. –

+0

Tôi đặc biệt khuyên bạn nên tránh các khối catch trống, chắc chắn nếu bạn bắt bất kỳ 'ngoại lệ' có thể có trong số – Robin

+0

có thể trùng lặp của [Làm thế nào để tạo ra một JTable không thể chỉnh sửa] (http://stackoverflow.com/questions/1990817/how -to-make-a-jtable-non-editable) – Math

Trả lời

25
private TableModel model = new DefaultTableModel(data, columnNames) 
    { 
    public boolean isCellEditable(int row, int column) 
    { 
     return false;//This causes all cells to be not editable 
    } 
    }; 
    private JTable table = new JTable(model); 

Edited. Nếu bạn đang làm điều này trong Netbeans IDE nhà thiết kế, hãy làm theo các bước dưới đây:

  • Chọn hình thức mà trên đó các JTable được đặt
  • Từ Navigation Pane, mở rộng JScrollPane và nhấp chuột phải vào JTable và chọn Customize như hình dưới đây:

Navigator Pane

  • Trên tùy biến mã, hãy chọn menu thả xuống thứ hai và chọn thuộc tính tùy chỉnh. Điều này cho phép bạn chỉnh sửa định nghĩa mã DefaultTableModel.
  • Bây giờ hãy dán mã này: {public boolean isCellEditable(int row, int column){return false;}} trước lần đóng cửa cuối cùng );

thiết lập cuối cùng của bạn nên hình như hình dưới đây:

  • Nhấn ok để lưu - và hoàn thành công việc.

Code Customizer

+0

đề xuất chính xác +1 – mKorbel

+0

cảm ơn nhưng tôi không nghĩ rằng điều này sẽ hoạt động trong mã của tôi. mô hình bảng mặc định mà tôi đang sử dụng đã được tạo bởi netbeans. Thật không may, tôi không thể chỉnh sửa mã. Có cách nào khác cho việc này không? – John

+0

Bạn có thể làm điều đó trong Netbeans '@ alain.janinm' đã đăng cách làm điều này trong nhà thiết kế Netbean. – Bitmap

6

Nếu bạn sử dụng DefaultTableModel bạn có thể ghi đè lên các phương pháp isCellEditable và thực hiện nó khi xây dựng GUI:

table.setModel(new DefaultTableModel() { 

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

Như khác nói bạn phải tạo bạn sở hữu DefaultTableModel và ghi đè isCellEditable. Để sử dụng nó trong thiết kế Netbeans:

  • Nhấp chuột phải vào bảng
  • Properties -> Mã
  • trong Tuỳ Mã Creation thêm này: new JTable(new MyModel()) (giả sử bạn tạo lớp MyModel kéo dài AbstractTableModel)
1

Sử dụng Netbeans CẢM ƠN KHÁC là có thể. nếu bạn muốn tiếp tục sử dụng mô hình bảng mặc định làm OP đề cập đến Không cần thiết phải tạo mô hình bảng mới nếu bạn không muốn.

  1. Chọn JTable "tài sản"

  2. Chọn "TableModel" lĩnh vực trong "tài sản" mà sẽ mở DialogBox khác.

  3. Từ đó, bạn có thể sửa đổi trường hộp kiểm "có thể chỉnh sửa" cho mỗi cột.

Không chắc mà từ đó phiên bản này bắt đầu nhưng tôi đang sử dụng Netbeans 7.2

+0

Chăm sóc để giải thích ý kiến ​​của bạn. Giải pháp này hoạt động. – user2485933

+0

Điều này làm việc tốt cho tôi, tôi đang sử dụng NetBeans 7.0.1 – Gurce

0

Hãy thử này

JTable table = new JTable(); 
table.setEnabled(false); 
+1

Thêm một số chi tiết –

Các vấn đề liên quan