2014-09-08 13 views
11

Tôi có giao diện Swing đơn giản với JButton đang chạy trên máy tính bảng Surface với màn hình cảm ứng. Các nút có ActionListeners. Khi các nút này được nhấp từ chuột, chúng sẽ hiển thị đúng cách. Tuy nhiên, khi chúng được chạm vào màn hình cảm ứng, chúng vẫn giống nhau nhưng vẫn bắn ra actionPerformed(). Nếu chúng được khai thác hai lần thì chúng sẽ giảm một cách chính xác nhưng tắt 2 actionPerformed() s.Làm thế nào để làm cho Java JButton trực quan giảm xuống với màn hình cảm ứng?

Có cách nào để thay đổi hoạt ảnh của nút này diễn ra khi nhấn nút, thay vì được nhấp không? Tôi đã thử nghiệm nó và tôi có thể sử dụng một MouseListener và đặt tất cả các logic của tôi trong mouseClicked() nhưng nó không phải là rất thanh lịch để yêu cầu người dùng màn hình cảm ứng bấm đúp vào một nút.

+0

1. [ghi đè các sự kiện từ ButtonModel] (http://stackoverflow.com/a/5755124/714968) cho mục đích thử nghiệm, 2. không có câu hỏi ý tưởng thiếu chi tiết quan trọng về, dưới đây là một vài người dùng với touch_screens, 3. quan trọng được sử dụng L & F, 4. bỏ phiếu để đóng quá rộng – mKorbel

+3

Đây là câu hỏi hoàn toàn rõ ràng, cụ thể và được viết tốt. Nó có 10 upvotes trong nửa đầu của nó một giờ sau khi gửi bài. Có * nhiều * quá nhiều câu hỏi hay ở đầu gối. –

Trả lời

5

Sự cố bạn gặp phải là trong khi nhấp chuột là sự kiện kết hợp, một lần chạm trên màn hình thì không. Vì vậy, không có cách nào mà nó có thể đi xuống tại sự kiện đầu tiên và lên một lần nữa ở lần thứ hai. Tuy nhiên, những gì bạn có thể làm, khi bạn nhận được một sự kiện cảm ứng, là thay đổi trạng thái trực quan của nút để nó trông chán nản (sử dụng setPressed(true)), sau đó đặt bộ đếm thời gian 100ms hoặc lâu hơn và đặt trạng thái trở lại trạng thái bình thường. Quay lại đầu trang khi bộ hẹn giờ hết hạn (sử dụng setPressed(false)).

Cẩn thận với thời gian hết hạn: bạn cần setPressed(false) để xảy ra trên chuỗi giao diện người dùng. Vì vậy, bạn cần phải sử dụng SwingUtilities.invokeLater() làm trình bao bọc vòng cuộc gọi thứ hai đến setPressed. Hoặc, cách khác, sử dụng javax.swing.Timer làm phương tiện xếp hàng cuộc gọi thứ hai; phải mất một khoảng thời gian trễ và ActionAction được thực hiện trên chuỗi giao diện người dùng.

+0

không, tôi không có bất kỳ vấn đề với, cũng không phải với JButtons sơn – mKorbel

+0

Cảm ơn, tôi sẽ có một đi và xem làm thế nào tôi nhận được về với phương pháp này. –

+0

Hoạt động hoàn hảo. –

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