2009-05-21 16 views
6

Giả sử tôi có một thành phần Swing chuẩn như JSlider, nhưng tôi muốn điều chỉnh một chút bản đồ đầu vào. Bản đồ đầu vào mặc định và bản đồ hành động được cài đặt bằng giao diện và tôi muốn sử dụng lại một số hành động đã có sẵn trong ActionMap. Để làm điều đó, tôi cần phải đặt khóa của mục nhập ActionMap vào giá trị của một mục nhập của InputMap.Tên của các hành động mặc định trong ActionMap của thành phần Swing có được chuẩn hóa không?

Tôi có thể dễ dàng tra cứu các phím ActionMap (luôn là Chuỗi) khi chạy với trình gỡ lỗi và sử dụng lại nó. Nó sẽ hoạt động - được bảo đảm trên phiên bản JDK của tôi và L & F. Vì vậy, câu hỏi là, là chìa khóa cho các hành động thành phần Swing mặc định được ghi lại ở bất kỳ đâu, có thể "thay đổi hợp pháp" theo thời gian (nghĩa là, từ phiên bản JDK sang phiên bản JDK hoặc từ L & F đến L & F) và có bạn đã thấy một sự thay đổi trong thực tế?

Cảm ơn.

+1

Tôi đang tìm câu trả lời cho câu hỏi này. Cách khó khăn hơn vẻ bề ngoài! 1 vì tôi không thể cung cấp thêm –

Trả lời

4

Ok tôi mất một lúc để tìm kiếm điều này.

Tóm lại, chúng dường như không được thống nhất (nhiều) và chúng không thấy tài liệu (nhiều).

Lớp LookAndFeel là chìa khóa.Đây là hệ thống phân cấp:

  • LookAndFeel

  • BasicLookAndFeel

    • MetalLookAndFeel
    • MotifLookAndFeel
    • WindowsLookAndFeel
  • MultiLookAndFeel

Trong lớp BasicLookAndFeel, bạn có thể tìm ánh xạ mặc định cho các hành động và ràng buộc khóa, được kế thừa bởi tất cả các lớp khác. Vì vậy, bạn có thể coi lớp học này là tiêu chuẩn . Bạn có thể thấy rằng trong việc tạo ra các đối tượng "mặc định", xung quanh như 498 cho Java 1.4.2_17.

Các ràng buộc và ghi đè khóa bổ sung có thể được tìm thấy trên những người triển khai, chẳng hạn như WindowsLookAndFeel.

Một số trong số Có thể tìm thấy tên có sẵn trong lớp DefaultEditorKit dưới dạng trường tĩnh. Những thứ đó dường như an toàn để sử dụng và remap. Việc sử dụng chúng có thể được nhìn thấy trong các lớp WindowsLookAndFeel và MotifLookAndFeel. Tôi sẽ cảm thấy an toàn khi cho rằng những hành động đó sẽ không thay đổi.

Vì vậy, trong ngắn hạn, các Hành động được xác định trong DefaultEditorKit có thể không thay đổi. Tuy nhiên, các ràng buộc chính thay đổi hoàn toàn giữa triển khai L & F. Truy lục hành động từ bản đồ bằng cách sử dụng DefaultEditorKit.something và nó sẽ hoạt động trên các phiên bản. Ví dụ từ DefaultEditorAction mà bạn có thể sử dụng với JSlider:

/** 
* Name of the Action for extending the selection 
* by moving the caret logically forward one position. 
* @see #getActions 
*/ 
public static final String selectionForwardAction = "selection-forward"; 
3

ActionMapInputMapgetParent()setParent(), vì vậy giải pháp là:

  1. Tạo bản đồ mới với vài thay đổi mà bạn muốn thực hiện.
  2. Query thành phần của bạn cho đó là bản đồ
  3. Set rằng bản đồ như là cha mẹ của bản đồ mới của bạn
  4. Cài đặt bản đồ mới của bạn trong thành phần

Bằng cách này sửa đổi của bạn ghi đè lên và mở rộng các ánh xạ hiện có.

[EDIT] Tôi không biết rằng có danh sách tất cả các khóa ở bất kỳ đâu. Nhưng những thứ như maxScroll phải là "ổn định", tức là chúng sẽ tồn tại trong các phiên bản sau (không phải Swing đã thay đổi nhiều trong 10 năm qua ...)

Vì vậy, nếu bạn cần thay thế một ánh xạ nhất định ở trên. Bằng cách này, bạn giữ tất cả các ánh xạ hiện có của L & F (giữ thành phần có thể sử dụng được ngay cả khi bạn mắc lỗi). Nếu bạn phụ thuộc vào ghi đè lên một khóa nhất định, sau đó tôi đề nghị để kiểm tra xem chìa khóa tồn tại và ném một lỗi nên nó đột nhiên biến mất.

Bằng cách này, mã của bạn sẽ hoạt động (có thể trong nhiều năm) và nếu mã này bị hỏng, mã sẽ chủ động cho bạn biết về thay đổi.

+0

đây không phải là những gì tôi hỏi về – sereda

+0

Các tác phẩm tương tự với InputMap, vì vậy tôi tự hỏi tại sao bạn không thể mở rộng bản đồ hiện tại? Tại sao bạn muốn sao chép tất cả các khóa vào bản đồ mới? –

+0

Tôi không gặp vấn đề gì khi mở rộng các bản đồ đầu vào và hành động, và tôi không muốn sao chép tất cả các phím. Xin lỗi nếu điều này không rõ ràng từ từ ngữ của câu hỏi của tôi. Câu hỏi của tôi là liệu các phím cho các hành động được sử dụng trong các bản đồ đó có được ghi chép ở bất kỳ đâu hay không (nói cách khác, mã này giả định có một khóa, "maxScroll" cho hành động di chuyển thanh trượt đến cuối thang đo) – sereda

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