Tôi nghĩ rằng thành phần JTable nên thực hiện tốt hơn công việc lọc các khóa sẽ bắt đầu chỉnh sửa. Ý tôi là, với việc thực hiện hiện tại, nếu bạn gõ DEL, Ctrl + Shift + DEL, F5, F7, ví dụ, trong một ô có thể chỉnh sửa, trình soạn thảo ô sẽ xuất hiện. Theo tôi, bắt đầu một trình soạn thảo ô với các phím như thế này là rất không trực quan đối với người dùng cuối.Bắt đầu chỉnh sửa trong ô JTable chỉ với các khóa hợp lý
Ngoài ra, còn có một vấn đề khác: JTable không biết về các ràng buộc khóa có thể khác được xác định trong biểu mẫu. Nếu bạn có một ràng buộc phím Ctrl + Shift + C được xác định cho một nút trên biểu mẫu của bạn, nếu bạn gõ tổ hợp phím này trong JTable của bạn, bảng sẽ bắt đầu chỉnh sửa và họ hành động ràng buộc phím nút của bạn sẽ được gọi tiếp theo. Tôi nghĩ rằng nên có một cách dễ dàng để ngăn chặn điều này thay vì vô hiệu hóa tất cả những ràng buộc khóa đã được xác định trong bản đồ ràng buộc khóa bảng của bạn.
Có một số thành phần của bên thứ ba đã được giải quyết, ít nhất một phần, một số vấn đề này, đặc biệt là bắt đầu chỉnh sửa bằng khóa hợp lý không? Tôi không muốn tự mình lọc hết.
Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn bạn.
Marcos
CẬP NHẬT
Đối với thời điểm hiện tại tôi đang sử dụng đánh giá cao không hoàn hảo "giải pháp" này, ít nhất làm cho mọi thứ ít tồi tệ hơn cho thời điểm này. Cải tiến, ý kiến và đề xuất được đánh giá cao.
@Override
public boolean isCellEditable(EventObject e)
{
if (e instanceof MouseEvent)
{
return ((MouseEvent) e).getClickCount() >=
_delegate.getMouseClickCountToStartEditing();
}
else if (e instanceof KeyEvent)
{
KeyEvent event = (KeyEvent) e;
int key = event.getKeyCode();
if ((key >= KeyEvent.VK_F1 && key <= KeyEvent.VK_F12) &&
KeyStroke.getKeyStrokeForEvent(event) != _startEditingKey)
{
return false;
}
int ctrlAlt = KeyEvent.CTRL_DOWN_MASK | KeyEvent.ALT_DOWN_MASK;
if ((event.getModifiersEx() & ctrlAlt) == ctrlAlt)
{
return true;
}
if ((event.getModifiersEx() & ctrlAlt) != 0)
{
return false;
}
return true;
}
else
{
// Is this else really needed? Are there other events types
// other than mouse and key events?
return true;
}
}
// _startEditingKey is obtained with this method
private KeyStroke getStartEditingKey()
{
InputMap bindings = TheTable.this.getInputMap(
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
for (KeyStroke key : bindings.allKeys())
{
Object binding = bindings.get(key);
if ("startEditing".equals(binding))
{
return KeyStroke.getKeyStroke(
key.getKeyCode(), key.getModifiers(), true);
}
}
return null;
}
Vui lòng chỉnh sửa câu hỏi của bạn để bao gồm [sscce] (http://sscce.org/) hiển thị vấn đề cụ thể bạn đang gặp phải. – trashgod
Xin lỗi. Tôi nghĩ rằng một sscce là vô dụng trong trường hợp này. Vấn đề đã được mô tả rõ ràng bởi văn bản của tôi. – Marcos