PDA

View Full Version : [Q] Hỏi về JMenu, JTextArea



Liwh
05-11-2002, 09:33
Em có tạo 1 JFrame có chứa menu, em dùng Mnemonic và Accellerator để làm phím tắt. Chương trình còn có 1 JTextArea để gõ văn bản. Nhưng có một số cái em không biết làm sao :
1. Các keystroke khác như Ctrl+O, Ctrl+S (em dùng để mở File và lưu File) thì hoạt động bình thường. Nhưng cái Ctrl+C, Ctrl+V thì nó không chịu copy hay paste như khi em click lên cái JMenuItem đó. Em đã addActionListener(this); cho 2 cái đó hết rồi. Sau đây là đoạn mã:
static String clip; //Khai bao dau tien
public void actionPerformed(ActionEvent e) {
if (e.getSource() == copy) { //Nếu là copy
if (!txtArea.getSelectedText()) {
clip = txtArea.getSelectedText();
}
}

if (e.getSource() == paste) {
txtArea.insert(clip, txtArea.getCaretPosition());
}
}

Khi em chạy thì không hiểu sao nhấn Ctrl+C nó ra một cái text mà em copy từ một chương trình khác. Nhưng nếu click lên cái JMenuItem thì ra được.

Thêm một điều nữa class nào của Java có liên quan đến clipboard vậy?
Và thí dụ mình không muốn người ta lấy dữ liệu của mình khi thể hiện trên JTextArea (tất nhiên đã txtArea.setEditable(false);), người ta vẫn có thể nhấn Ctrl+C để copy, vậy có cách nào disable luôn không ?

Em không hiểu nếu mình làm một application Java xong rồi đưa tới cho khách hàng, thì khách hàng cũng phải chạy [b]java[/] application hay sao ? Như vậy mắc công quá?
Cám ơn

QuanN
05-11-2002, 11:45
Có vẻ như clipboard đã 0 chứa gì đó. Thử tham khảo mã nguồn của VietPad cho thí dụ liên quan.

http://vietpad.sourceforge.net

Cách disable copy hay paste là override copy() hay paste() method của JTextComponent để nó 0 làm gì cả.

copy() {}
paste() {}

Người dùng cần phải có JRE mới chạy được Java apps.

Liwh
06-11-2002, 00:30
Cám ơn bạn.