2012-09-12 37 views
6

Tôi rất có kinh nghiệm với WPF và mới đối với JavaFX 2.0. Tôi sắp chuyển một dự án Silverlight sang JavaFX 2.0. Hai cuốn sách Apress và một số chủ đề không thể trả lời các câu hỏi của tôi (có thể tôi không nhìn thấy hoặc hiểu được câu trả lời, vì những ảnh hưởng đến WPF của tôi).JavaFX 2.0 - kiểu dáng/mẫu kiểm soát hiện có

Điều tôi cần là điều khiển với chức năng RadioButton nhưng giao diện người dùng hoàn toàn khác. RadioButton của tôi có một văn bản, một hình ảnh, không có nút, một dòng (hình chữ nhật) bên dưới văn bản. Nếu RadioButton không được chọn, văn bản và hình ảnh trong suốt, hình ảnh được tô xám và hình chữ nhật không hiển thị. Nếu nó được chọn, văn bản và hình ảnh mờ đục, hình ảnh được tô màu và hình chữ nhật sẽ hiển thị (tất cả thay đổi qua hoạt ảnh).

Tôi biết cách điều khiển JavaFX 2.0 hiện tại, nhưng tôi không biết cách tạo kiểu cho RadioButton theo cách này.

Trong WPF tôi chỉ cần tạo một mẫu mới cho kiểu RadioButton của tôi ... như tôi đã đề cập, có lẽ những ảnh hưởng đến WPF này đã ảnh hưởng đến JavaFX 2.0 là rào cản của tôi.

Thanks ...

Edit:

Có vẻ như nó không phải là có thể tạo ra một khuôn mẫu để kiểm soát hiện có (?): JavaFX 2.0 render controls inside control

Vậy điều gì sẽ là cách tốt nhất để thực hiện RadioButton của tôi? Tôi bận tâm về ToggleGroup ...

+0

Bạn có thể chèn hình ảnh của các trạng thái đã chọn và không được chọn không? – jewelsea

+0

Có thể, nhưng không cần thiết vì hình ảnh sẽ trong suốt và được tô xám nếu không được chọn. – thinkU

+0

Xin lỗi vì nhầm lẫn, tôi có nghĩa là đặt hình ảnh về trạng thái nút có ý nghĩa như thế nào trong câu hỏi để dễ dàng xây dựng câu trả lời giải quyết trực tiếp trường hợp của bạn. – jewelsea

Trả lời

5

Có nhiều cách tiếp cận để kiểm soát kiểu hoặc mẫu JavaFX.

  1. Điều khiển JavaFX được tạo sẵn có thể tạo kiểu qua css.

  2. Điều khiển JavaFX được tạo sẵn cũng có thể được phân lớp để sửa đổi chức năng và giao diện của chúng. An example là IntField, mà tạo ra một TextField tùy chỉnh để chỉnh sửa số nguyên chỉ.

  3. Thông thường, bạn có thể tạo các thành phần tùy chỉnh bằng cách đặt một loạt các điều khiển hiện có với nhau trong bố cục Pane hoặc Group. Bằng cách tham số hóa phương thức hoặc lớp mà xây dựng thành phần hỗn hợp, bạn có thể tạo mẫu thành phần tùy chỉnh một cách hiệu quả thông qua mã. Dưới đây là ví dụ về digital and analogue clock components được tạo bằng phương thức như vậy (và có thể tạo kiểu qua css).

  4. Bạn cũng có thể quản lý bố cục của thành phần tùy chỉnh qua các tệp fxml khác nhau bằng cách sử dụng cách tiếp cận trong introduction to fxml document. Fxml có thể được tạo ra từ việc sử dụng ngôn ngữ templating như velocity hoặc một vài tệp fxml tĩnh khác nhau có thể được viết cho các bố cục khác nhau. Fxml tĩnh hoặc được tạo cũng có thể được phân phát động từ máy chủ web, như trang html được tạo động nếu cần.

  5. Một cách khác để bạn có thể tạo điều khiển tùy chỉnh giống như cách nhóm JavaFX thực hiện điều đó (bằng cách tạo lớp Skin và Hành vi để kiểm soát). Theo JavaFX 2.2 (và có lẽ ngay cả trong các phiên bản JavaFX tương lai), điều này là thích hợp nhất cho những người tạo thư viện, chẳng hạn như những người làm việc trên jfxtras hoặc đóng góp trực tiếp vào dự án JavaFX open source control repository.

  6. Cũng lưu ý rằng, trong css, bạn có thể chỉ định một lớp da cho một điều khiển, ví dụ RadioButton đã css sau:

 
    .radio-button { 
     -fx-skin: "com.sun.javafx.scene.control.skin.RadioButtonSkin"; 
    } 

Vì vậy, một trong những cách để tùy chỉnh các RadioButton trông như bạn đang xem xét là:

  1. Lấy một bản sao của nguồn cấp mã JavaFX nguồn mở tôi đã liên kết trước đó.
  2. Sao chép nó vào một tên lớp mới (ví dụ: LinedRadioButtonSkin).
  3. Sửa đổi để có giao diện bạn muốn.
  4. Tạo biểu định kiểu css tùy chỉnh cho dự án của bạn.
  5. Trong biểu định kiểu css tùy chỉnh, hãy đặt thuộc tính -fx-skin của lớp .radio-button để sử dụng lớp LinedRadioButtonSkin mới của bạn.

Chừng nào Skin mới của bạn được thực hiện một cách chính xác và không dây lên đến ButtonBehaviour lớp hiện tương tự như cách thức hoạt động của lớp RadioButtonSkin hiện có, sau đó bạn nên tự động nhận được các hành vi tương tự cho làn da dựa nút radio mới của bạn như đài phát thanh hiện có nút. Ví dụ, nút sẽ trả lời các nhấp chuột, bộ tăng tốc bàn phím, sự kiện chạm, tương tác với ToggleGroups vv, chính xác giống với RadioButtonSkin hiện có và có thể truy cập được bằng cách sử dụng api RadioButton hiện tại. Đó là, nút giữ lại cảm giác (hành vi) của một RadioButton nhưng có thể có một hoàn toàn khác nhau bằng cách sử dụng các thành phần nội bộ khác nhau, bố trí và phong cách css.

Nếu bạn quyết định đi tuyến đường da tùy chỉnh và cần trợ giúp về quy trình này, hãy xem xét liên hệ với các thành viên của nhóm jfxtras và tặng làn da mới của bạn cho dự án jfxtras.

Caveat

da và lớp Hành vi trong JavaFX 2.2 là apis thực hiện tư nhân, không apis hỗ trợ công khai và sẽ thay đổi trong tương lai khi chuyển sang dùng api công cộng (dự kiến ​​cho việc phát hành lớn tiếp theo của JavaFX - JavaFX/JDK 8) - vì vậy nếu bạn sử dụng chúng ngày hôm nay, hãy thận trọng như vậy. Khi họ chuyển sang các API công khai, tôi hy vọng bạn sẽ thấy nhiều thông tin và hướng dẫn hơn về cách tạo các điều khiển của riêng bạn bằng cách sử dụng các lớp này.

Tên gói và phương thức api sẽ thay đổi làm api để tạo điều khiển của riêng bạn từ chuyển đổi Skin và Hành vi từ việc triển khai nội bộ sang chế độ công khai. Ví dụ: com.sun.javafx.scene.control.behavior.BehaviorBase có thể trở thành javafx.scene.control.behavior.Behavior, vì vậy nếu bạn tạo Lớp hành vi mở rộng lớp, nó sẽ không chạy trên phiên bản JavaFX mới cho đến khi bạn sửa đổi nguồn của lớp để tham chiếu tên và api mới và biên dịch lại nó. Vì lý do này, sẽ không có sách hay về chủ đề này cho đến khi API được công khai và cuối cùng vì bất kỳ mã ví dụ nào trong sách được viết dựa trên api riêng sẽ bị lỗi thời ngay khi api được tạo công khai và sẽ không biên dịch chống lại api công khai, cũng như không thực thi chống lại phiên bản JavaFX mới hơn.

+0

Cảm ơn bạn rất nhiều, Jewelsea! Tất cả thông tin tôi muốn và tôi đã bỏ lỡ trong hai cuốn sách. (6) có vẻ giống như "WPF mẫu" cách tôi sử dụng. Tôi sẽ cố gắng (5) và (6) ... đã rất vui mừng. Tái bút: Bạn có thể đề xuất một cuốn sách hay không? P.P.S: Tôi không hiểu tại sao phải sử dụng API triển khai riêng tư một cách thận trọng? – thinkU

+0

Cập nhật thông tin báo trước để trả lời các câu hỏi của bạn. – jewelsea

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