2012-07-25 27 views
5

Có lý do nào khiến LWUIT a Button có thể có ActionListener riêng của mình (thông qua button.addActionListener) trong khi Command không?Tại sao các Nút có trình nghe và lệnh hành động không có trong LWUIT?

Cách duy nhất để có người nghe cho một lệnh cụ thể là thêm một ActionListener vào một biểu mẫu và kiểm tra người nghe mà sự kiện Command đến từ như dưới đây?

public void startApp() { 
    Display.init(this); 
    f = new Form("Mixed Record"); 
    exit = new Command("Exit"); 
    start = new Command("Start"); 
    Button button = new Button("Button"); 

    f.addCommand(exit); 
    f.addCommand(start); 
    f.addCommand(delete); 
    f.addComponent(button); 

    f.addCommandListener(new ActionListener() { 

     public void actionPerformed(ActionEvent ae) { 
      if (ae.getCommand().equals(exit)) { 
       //Do Exit command code 
      } else if (ae.getCommand().equals(start)) { 
       //Do Start command code 
      } 
     } 
    }); 

    button.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent ae) { 
      //Do button code 
     } 
    }); 

    f.show(); 
} 

Trả lời

6

Vâng, tôi không thể nói cho bạn biết chính xác lý do tại sao những người đã viết LWUIT đưa ra quyết định đó, nhưng có một số lý do tại sao nó làm cho tinh thần.

Khi biểu mẫu chứa nhiều lệnh, chúng được nhóm trong một menu. Mỗi lần người dùng mở rộng sau đó thu gọn menu, tối đa một Lệnh được thực thi. Như vậy, các Lệnh được liên kết với nhau nhiều hơn một cách khái niệm so với các nút, đặc biệt vì không phải là hiếm khi tái sử dụng các lớp con Button từ một Form này sang một Form khác.

Cũng có thể có một lo ngại về việc tạo API của Biểu mẫu LWUIT trông rất giống với Biểu mẫu LCDUI trong đặc tả MIDP.

Tôi cũng thích rằng mã của bạn cho thấy một kết quả tích cực của quyết định:

Bạn đã có 2 lớp bên trong vô danh (các lớp con ActionListener) trong mã của bạn. Nếu mỗi Command có ActionListener riêng của nó, có lẽ bạn đã viết 3 lớp bên trong chưa được đặt tên. Tuy nhiên, các nhà phát triển có xu hướng làm điều đó rất nhiều, khi bạn dành nhiều thời gian hơn để xem các dấu vết mã chứa nhiều lớp bên trong chưa được đặt tên, bạn sẽ nhận ra rằng thực hành không tốt để có nhiều hơn một lớp trong mỗi lớp.

+0

Tôi hiểu. Nó có ý nghĩa bây giờ .. (thay vì chỉ là gây phiền nhiễu). Cảm ơn bạn đã trả lời chi tiết! –

+1

Lệnh là một trình lắng nghe hành động (bạn có thể phân lớp nó và viết mã trong phương thức actionPerformed của nó.) Thêm một trình lắng nghe hành động vào một trình lắng nghe hành động có vẻ như là một lời chỉ trích hơi khó hiểu. của LWUIT) –