Khi tạo thành phần JTable, tính năng chỉnh sửa ô được bật theo mặc định. Làm cách nào để ngăn người dùng chỉnh sửa nội dung của JTable?Tắt chỉnh sửa người dùng trong JTable
Trả lời
JTable sử dụng đối tượng AbstractTableModel. Đây là thứ bạn truyền vào hàm tạo của JTable. Bạn có thể viết AbstractTableModel của bạn như sau
public class MyTableModel extends AbstractTableModel {
public boolean isCellEditable(int row, int column){
return false;
}
}
và sau đó khởi tạo JTable của bạn như
JTable myTable = new JTable(new MyTableModel());
Tôi đã thử mã này để tránh người dùng có thể chỉnh sửa nội dung của một ô đang hoạt động. Tuy nhiên, nó cũng tránh ứng dụng thay đổi nội dung của ô, có cách giải quyết nào cho trường hợp cụ thể đó không? – clement
Rõ ràng, chỉ đơn giản là đi qua một boolean không phải là sang trọng đủ cho các nhà thiết kế ... – pauluss86
Bạn có thể tạo một JTable sử dụng đoạn mã sau:
JTable jTable = new JTable() {
private static final long serialVersionUID = 1L;
public boolean isCellEditable(int row, int column) {
return false;
};
};
Về cơ bản những gì chúng ta đang làm ở đây là trọng isCellEditable
và luôn luôn trả về false từ nó. Điều này sẽ tạo ra một JTabel không chỉnh sửa.
Nếu đây là tất cả những gì bạn đang làm, tôi không thấy vấn đề với việc sử dụng một lớp ẩn danh. – Chase
điều này sẽ là câu trả lời tốt hơn. Tôi không tìm thấy bất cứ điều gì sai trong việc sử dụng lớp học anon ở đây. Người dùng có thể sử dụng 'TableModel' khác ở vị trí khác. Upvote! – instinct
+1 @instict vì điều này không ảnh hưởng đến mô hình bảng này là một câu trả lời tốt hơn nhiều theo ý kiến của tôi. Ngoài ra câu hỏi: là serialVersionUID thực sự cần thiết? – Paul
Hi Tôi đang làm việc rất nhiều trên java vì vậy tôi sẽ cung cấp cho bạn cách của tôi: Có hai khả năng đầu tiên dưới netbeans. Chuyển đến mã tùy chỉnh và làm cho nó như thế này:
JTArticleJPAddArrticle = new javax.swing.JTable();
JTArticleJPAddArrticle.setBackground(new java.awt.Color(204, 204, 255));
JTArticleJPAddArrticle.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Reference","Libellé","Marque","Prix d'achat","Prix de vente","Quantité","Total","Etat"
}
){
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
});
jScrollPane8.setViewportView(JTArticleJPAddArrticle);
Cách khác của tôi là làm ví dụ cho mô hình bảng. Đây là cách thứ hai:
model=new DefaultTableModel(head, 0){
@Override
public boolean isCellEditable(int i, int i1) {
return false; //To change body of generated methods, choose Tools | Templates.
}
};
jtable.setmodel(model);
Hãy tận hưởng điều này phù hợp với tôi. Tất cả những gì tôi muốn làm là giúp đỡ các bạn bởi vì tôi đã được giúp đỡ rất nhiều trước đó.
Đây là cả hai cùng một cách.Đoạn mã thứ hai chỉ chứa ít mã không liên quan hơn, làm cho mã này trở nên tốt hơn như một câu trả lời. –
@MicahStairs trong quá trình thực thi đầu tiên tốt hơn vì lớp sẽ được biên dịch dễ dàng so với bước thứ hai là ghi đè sẽ mất thêm một chút thời gian, nhưng theo quan điểm thiết kế cho nhà phát triển, thứ hai là mã dễ bảo trì tốt hơn; –
myTable.setDefaultEditor(Object.class, null);
Có lẽ bạn có thể giải thích công việc này và liệt kê những hạn chế? Có vẻ như ngữ nghĩa khác với các câu trả lời trước - tức là. bạn đang thiết lập một trình soạn thảo rỗng. Có lẽ điều này là chậm hơn bởi vì khẳng định liệu bảng có thể chỉnh sửa được yêu cầu sau một đường dẫn mã dài hơn không? –
Đây là câu trả lời đơn giản mà tôi đang tìm kiếm. Có thể không phải là hiệu suất tốt nhất khôn ngoan, nhưng đơn giản của nó là giá trị nó. – Cristian
Bạn đã tryed đơn giản:
JTable table = new JTable();
table.setEnabled(false);
Về JComponent.setEnabled(boolean) nó Sayes:
Sets hay không phần này được kích hoạt. Một thành phần được kích hoạt có thể đáp ứng đầu vào của người dùng, trong khi một thành phần không được kích hoạt không thể trả lời đầu vào của người dùng. Một số thành phần có thể thay đổi biểu diễn trực quan của chúng khi chúng bị vô hiệu hóa để cung cấp phản hồi cho người dùng rằng chúng không thể lấy đầu vào.
Khi nói đến JTable, dường như không có bất kỳ phản hồi trực quan nào cả. Với các perk vẫn có thể bấm vào các tiêu đề cột. Và trong quá trình thực hiện của tôi, ứng dụng vẫn có thể thay đổi nội dung của các ô.
Rất tiếc. Chỉ cần thấy rằng người dùng Siddhu đến với cùng một giải pháp ở đây: http://stackoverflow.com/questions/1990817/how-to-make-a-jtable-non-editable?noredirect=1&lq=1. dunno nếu tôi nên loại bỏ nó ở đây hoặc rời khỏi nó, vì tôi không biết câu hỏi có thể bị xóa như là một bản sao. Xin lỗi, một noob ở đây: o – brat
Vấn đề với điều này là người dùng không thể thấy nếu bất kỳ hàng hoặc ô nào được chọn ngay cả sau khi anh ta nhấp vào nó. tôi tìm thấy bằng cách sử dụng 'setDefaultEditor()' để tốt hơn điều này vì nó cung cấp một phản hồi trực quan khi người dùng chọn bất kỳ hàng hoặc ô nào. – anotherGatsby
tm = new javax.swing.table.DefaultTableModel()
{
public Class<?> getColumnClass(int column)
{
switch(column)
{
case 0:
return String.class;
case 1:
return String.class;
case 2:
return String.class;
case 3:
return String.class;
case 4:
return String.class;
case 5:
return String.class;
case 6:
return String.class;
case 7:
return String.class;
case 8:
return String.class;
case 9:
return String.class;
case 10:
return String.class;
case 11:
return Boolean.class;
default:
return String.class;
}
}
@Override
public boolean isCellEditable(int row, int column) {
/* Set the 11th column as editable and rest non-
editable */
if(column==11){
return true;
}else{
//all other columns to false
return false;
}
}
};
table = new javax.swing.JTable(tm);
Vui lòng [edit] (https://stackoverflow.com/posts/49110309/edit) câu trả lời của bạn để giải thích tại sao đoạn mã này trả lời câu hỏi. –
- 1. JTable với trình chỉnh sửa phức tạp
- 2. Chỉnh sửa Hồ sơ Người dùng w/Xác thực Mẫu
- 3. Chỉnh sửa khoá đăng ký của người dùng khác
- 4. Cách để JTable ở trên ô đã chỉnh sửa
- 5. Java JTable - Chỉ tạo một cột có thể chỉnh sửa
- 6. Phím tắt Xcode để chuyển đến "người gọi" tiếp theo trong Trình chỉnh sửa trợ lý?
- 7. Sitecore - Thêm trường tùy chỉnh vào Trình chỉnh sửa người dùng
- 8. Bắt đầu chỉnh sửa trong ô JTable chỉ với các khóa hợp lý
- 9. Làm cách nào để đọc lối tắt bàn phím tùy chỉnh từ người dùng trong WPF?
- 10. Cách tắt tương tác người dùng trong Chế độ xem tùy chỉnh
- 11. Tắt phiên người dùng cho khách
- 12. Tắt chỉnh sửa ô cụ thể trong lưới Slick
- 13. Phím tắt của Trình chỉnh sửa thẻ nhanh trong Aptana
- 14. Đặt căn chỉnh phải trong cột JTable
- 15. Chỉnh sửa cảnh báo của người dùng khác cho một dự án trong TFS
- 16. Buộc người dùng khóa tệp trong SVN trước khi chỉnh sửa
- 17. Cho phép người dùng chỉnh sửa văn bản trong ô UITableView
- 18. vấn đề tiêu điểm bằng cách sử dụng JComboBox làm trình chỉnh sửa ô trong JTable
- 19. Làm thế nào để tạo một jtable không thể chỉnh sửa trong java?
- 20. Cách tắt đăng ký giao diện người dùng trong Magento
- 21. Cách sửa lỗi nhấp nháy trong Điều khiển người dùng
- 22. Giao diện người dùng Kendo - Làm cách nào để tạo các trường cụ thể chỉ đọc trong khi chỉnh sửa khi tạo lưới chỉnh sửa trong kendo?
- 23. Thêm trường tùy chỉnh cho người dùng trong django
- 24. Tắt hoặc bỏ màu xám nút trong Trình chỉnh sửa TreeNode
- 25. Lỗi mô hình người dùng tùy chỉnh
- 26. Giao diện người dùng chung để chỉnh sửa các tệp cấu hình ứng dụng C#
- 27. Apple có cung cấp giao diện người dùng để chỉnh sửa/thêm Lời nhắc không?
- 28. Thêm văn bản vào JTextPane mà không cần người dùng chỉnh sửa?
- 29. Devise, OmniAuth & Facebook - Làm cách nào để cho phép người dùng chỉnh sửa mật khẩu?
- 30. Cho phép người dùng chỉnh sửa tệp cấu hình sau khi triển khai
Xem [* Cách sử dụng bảng *] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html). – trashgod