2009-05-05 46 views
33

Tôi luôn muốn tạo các thành phần tùy chỉnh trong Java hoặc tùy chỉnh các thành phần hiện có, nhưng tìm kiếm của tôi không bao giờ dẫn đến bất kỳ điều gì hữu ích. Vì vậy, tôi quyết định hỏi cộng đồng StackOverflow:Cách tạo thành phần Swing tùy chỉnh

Tôi có thể tìm thông tin về tùy chỉnh thành phần GUI Java nói chung ở đâu?

Và khi tôi muốn tùy chỉnh, tôi không nói về việc thay đổi màu sắc, phông chữ, v.v. Tôi có nghĩa là thực sự tùy chỉnh chúng. Dưới đây là hai thành phần ví dụ mockup:

Custom Components Mockup

Ghi chú
tôi bắt đầu câu hỏi này chủ yếu là để tìm cách tạo hai thành phần tùy chỉnh trên. Nhưng sau đó tôi nhận ra rằng không có một câu hỏi chung về hack thành phần swing. Vì vậy, tôi nghĩ rằng nó sẽ là tốt hơn để có một danh sách các nguồn lực.

Trong trường hợp bạn đang tự hỏi làm thế nào để hai thành phần trong công tác mockup, ở đây nó là:

Một JScrollPane tùy chỉnh có hai Scrollbars cho mỗi hướng. Mỗi thanh cuộn có thể hoạt động khác nhau. Ví dụ, những cái bên ngoài cuộn bình thường và những cái bên trong di chuyển khung nhìn theo cách giống như Picasa hơn. Tôi thực sự có một câu trả lời (!) Làm việc từ các nhóm google here, nhưng đó chỉ là mã.

Thứ hai là một JComboBox tùy chỉnh, khi danh sách bật lên được mở rộng, có phần tử JComponent ở cuối. Điều này có thể là bất cứ điều gì, từ một JLabel đơn giản với một biểu tượng, đến một JButton điều khiển danh sách theo một cách.

Nhưng câu hỏi này không phải về những thành phần cụ thể đó. Đó là khoảng tìm tài nguyên (trang web, sách, bài viết, v.v.) để tìm hiểu cách tạo chúng.

+10

Tôi chỉ nhận thấy rằng các sceenshot nói "jbomponent" ...: P – pek

Trả lời

17

Bài viết này, How To Write a Custom Swing Component phải thực sự hữu ích. Nó bao gồm nhân rộng một điều khiển thanh trượt Windows có cả hai bước rời rạc và một phạm vi liên tục.

+2

Liên kết này đã lỗi thời. Mặc dù trang thực vẫn tồn tại, bạn sẽ thấy hình ảnh và liên kết trong trang đều bị thiếu. Có ai có liên kết cập nhật không? Ngoài ra, nói chung, trên SO, chúng tôi đặt nội dung có liên quan từ liên kết trong câu trả lời chính xác cho các trường hợp như thế này, nơi liên kết đã lỗi thời. – Jason

4

Đây là một câu hỏi khá mở, câu trả lời đơn giản ngắn gọn là bạn phân lớp JComponent hoặc một trong số đó là hậu duệ của nó và thêm chức năng mà bạn yêu cầu. Rõ ràng, tùy thuộc vào những gì bạn muốn làm điều này có thể khác nhau trong khó khăn. Để bắt đầu, tôi khuyên bạn nên đọc số tutorial on using Swing components của Mặt trời nơi có các ví dụ về cách sử dụng scroll panes và . Một khi bạn đã đọc qua những điều đó và thử nghiệm, bạn có thể có nhiều câu hỏi cụ thể hơn để mọi người có thể cung cấp câu trả lời được xem xét dễ dàng hơn.

Nếu hai thành phần trong mô hình của bạn là tất cả những gì bạn muốn triển khai thì hãy cho chúng tôi ý tưởng tốt hơn về cách bạn muốn chúng hoạt động sẽ mang lại câu trả lời tốt hơn.

+0

Tôi đã đọc các Hướng dẫn Java (và luôn luôn làm khi nói đến Swing), nhưng nó không hoàn toàn đi sâu như tôi cần. – pek

+0

bạn có thể cụ thể hơn trong việc giải thích bạn cần gì không? Bạn có muốn biết cụ thể làm thế nào để đạt được các chức năng mà bạn đã nhạo báng trong câu hỏi hoặc là câu hỏi có ý nghĩa chung hơn? – ninesided

15

JDK là nguồn mở. Để hiểu cách bạn viết một thành phần Swing, không có nơi nào tốt hơn để tìm kiếm hơn là nguồn cho các thành phần Swing.Nói chung, khi bạn tạo các thành phần tùy chỉnh, bạn quan tâm đến một hoặc nhiều điều sau đây: {ngữ nghĩa tương tác, đại diện hình ảnh, cấu trúc thành phần}

Bắt đầu với các trường hợp đơn giản nhất:

linh kiện thụ động: JLabel
Các thành phần tương tác: JButton

JLabel sẽ minh họa phần mở rộng của thanh công cụ JComponent cho bản vẽ tùy chỉnh của một thành phần; trong trường hợp này, nó vẽ giá trị chuỗi 'văn bản' làm biểu diễn của nó.

JButton sẽ trình diễn phần mở rộng của thanh công cụ cho tương tác người dùng ngoài việc vẽ thành phần.

+5

Một vài điều cần lưu ý khi đọc mã Swing: có rất nhiều mã trong đó để tương thích ngược; hầu hết mã đồ họa thực tế nằm trong các lớp UI; các lớp học Swing đã "tiến hoá" và không nhất thiết phải đại diện cho các thực hành tốt nhất. –

+0

Địa chỉ web cho mã thành phần –

9

Filthy Rich Clients là một cuốn sách tuyệt vời, rất dễ đọc về chủ đề này. Đó là nhiều hơn về cải thiện giao diện của các thành phần Swing hơn so với việc tạo ra các thành phần hoàn toàn mới, nhưng nó đi vào trong sự can đảm của Swing và cung cấp rất nhiều ví dụ thực tế.

+0

Có, tôi đã đọc cuốn sách này. Cuốn sách rất hay nhưng, như bạn đã nói, nó chủ yếu là cải thiện giao diện. – pek

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