2010-12-14 35 views
7

Tôi có một trình đơn mà tôi đã tạo bằng JMenu. Tôi muốn gán một phím tắt Alt-F cho menu này. Tôi đã sử dụng setMnemonic ('F') để làm điều đó, nhưng trình đơn không nhận ra sự ghi nhớ.Java Swing JMenu Mnemonic

Cách tốt nhất để khắc phục sự cố hoặc gỡ lỗi sự cố này là gì? Tôi thấy rằng thiết lập một điểm break không giúp đỡ nhiều.

Cảm ơn bạn.

Đoạn Mã:

//higher up in variable declaration 
/** Menus on the menu bar */ 
private JMenu uiFindMnu   = new JMenu("Find"); 
... 
//inside the constructor 
// set mnemonic for the Find menu 
uiFindMnu.setMnemonic('F'); 
+0

Tôi nghĩ chúng ta sẽ cần xem một số mã. –

+0

Tại sao mọi người lại có thể đưa ra câu hỏi này? Đây là thứ cơ bản. Tất cả các poster phải làm là đọc API JMenu để tìm một liên kết đến hướng dẫn Swing về "Cách sử dụng menu" cho một ví dụ làm việc. Tại sao thưởng cho những người có điểm lười biếng? Không chỉ vậy mà không có một SSCCE, chúng tôi đang lãng phí thời gian đoán những gì các poster có thể đã làm sai, vì vậy câu hỏi thậm chí không phải là một câu hỏi hoàn chỉnh. – camickr

+1

Tôi thấy rằng JMenu Mnemonic hoạt động khác so với một nút nhớ. Khi tôi muốn nhấp vào một nút bằng cách sử dụng ghi nhớ, tôi có thể chỉ cần nhấn Alt theo sau chữ cái cắt ngắn. Với JMenu, tôi phải: Nhấn nút Alt, đợi Swing để làm sáng màn hình menu đầu tiên, sử dụng phím mũi tên để chọn menu khác hoặc nhấn phím tắt tương ứng để chọn menu. – zfranciscus

Trả lời

1

Sử dụng setMnemonic(KeyEvent.VK_F);

tôi khuyên bạn nên đọc về JMenus: Howto use Menus

Dưới đây là một đoạn trích của bài viết này: hỗ trợ

Menus hai loại bàn phím thay thế: mnemonics và máy gia tốc. Mnemonics cung cấp cách sử dụng bàn phím để điều hướng phân cấp menu, tăng khả năng truy cập của chương trình. Các trình tăng tốc, mặt khác, cung cấp các phím tắt để bỏ qua điều hướng hệ thống phân cấp trình đơn. Mnemonics dành cho tất cả người dùng; máy gia tốc dành cho người sử dụng điện.

Việc ghi nhớ là chìa khóa làm cho một mục menu đã nhìn thấy được chọn. Ví dụ, trong MenuDemo menu đầu tiên có ký tự A, và mục menu thứ hai có tính năng ghi nhớ B. Điều này có nghĩa là khi bạn chạy MenuDemo với giao diện Java, nhấn phím Alt và A làm cho menu đầu tiên xuất hiện. Trong khi menu đầu tiên hiển thị, nhấn phím B (có hoặc không có Alt) làm cho mục menu thứ hai được chọn. Một mục menu thường hiển thị ghi nhớ của nó bằng cách gạch chân xuất hiện đầu tiên của ký tự ghi nhớ trong văn bản của mục menu, dưới dạng các bản chụp nhanh sau đây. B là ký tự ghi nhớ cho menu này mục

Bạn có thể chỉ định một phép ghi nhớ khi xây dựng mục menu hoặc bằng phương pháp setMnemonic. Dưới đây là ví dụ về thiết mnemonics và tăng tốc:

//Setting the mnemonic when constructing a menu item: 
menuItem = new JMenuItem("A text-only menu item", 
         KeyEvent.VK_T); 

//Setting the mnemonic after creation time: 
menuItem.setMnemonic(KeyEvent.VK_T); 

Như bạn thấy, bạn thiết lập một ghi nhớ bằng cách xác định KeyEvent liên tục tương ứng với phím người sử dụng nên báo chí.

+0

Sẽ cung cấp cho thử này và tôi sẽ cho mọi người biết kết quả – zfranciscus

+0

@zfranciscus Đã chỉnh sửa bài đăng của tôi với liên kết giải thích mọi thứ bạn cần biết về JMenus :) – LaGrandMere

5

Bên trong một constructor lớp (mở rộng JFrame):

JMenu helpmenu = new JMenu("File"); 
helpmenu.setMnemonic('F'); 
JMenuBar menubar = new JMenuBar(); 
menubar.add(helpmenu); 
setJMenuBar(menubar); 

đó đã làm việc tốt cho tôi. Bạn sẽ phải cung cấp thêm một số chi tiết về mã của bạn để tôi có thể trả lời tốt hơn. Theo như cách khắc phục sự cố SWING hoặc bất kỳ GUI ứng dụng nào, một trong những khuyến nghị tốt nhất mà tôi có thể đưa ra là tạo ra kịch bản đơn giản nhất có thể. Tôi giữ một mẫu JFrame xương trần xung quanh mà tôi có thể ném mã đơn giản như thế này bên trong để thử nghiệm. Một khi bạn biết nó hoạt động trong kịch bản đơn giản nhất bạn có thể quay trở lại dự án của bạn và khám phá phần nào khác của GUI của bạn đang gây ra xung đột với chức năng này.

Chỉ vì tò mò, bạn không có biến cục bộ được gọi là 'uiFindMnu' trong Constructor đang ẩn biến lớp của bạn, phải không? Tôi muốn kiểm tra lại để chắc chắn rằng biến mà bạn đang gọi setMnemonic() là một biến được thêm vào MenuBar của bạn (và thực sự được hiển thị).

+0

Cảm ơn điều này thực sự hữu ích – zfranciscus

+0

Câu trả lời hay, nhưng đó là [không một ý tưởng hay] (http://stackoverflow.com/q/1143923/439793) để "mở rộng (ing) JFrame" –

2

Có vấn đề tương tự và nhận ra rằng do thiết lập của Nhìn và cảm nhận sau khi khởi tạo các thành phần gây ra sự cố. Lật các câu lệnh và nó hoạt động.

Đăng một bài đăng trên blog here