2014-12-03 101 views
-1

我有一個程序,我想單擊按鈕並讓它們將信息傳遞給它們的actionListeners。這是一個圖書館程序,用戶點擊圖書圖像,打開一個新的JFrame與關於該書的信息。如何根據按下哪個按鈕來製作單獨顯示的信息? (我想一個通用的ActionListener,而不是個別的,因爲我有超過200本書。)包含信息的Java ActionListeners

+0

這似乎是一個很基本的問題,一點研究就可以解決。 [使用按鈕的oracle教程](https://docs.oracle.com/javase/tutorial/uiswing/components/button.html)涵蓋了這一點。 – 2014-12-03 23:26:09

回答

0

你可以...

使用鍵的按鈕,它的價值鏈接到它Map。所以單擊該按鈕時,您可以使用JButton爲重點,並要求Map爲關聯值

看一看Collections Trail瞭解更多詳情...

你可以...

創建一個簡單的自定義ActionListener歷時的「書」作爲參考,這將是能夠執行單擊時所需的行動,但其定製爲個人的書......

喜歡的東西...

public class BookActionHandler implements ActionListener { 
    private Book book; 
    public BookActionHandler(Book book) { 
     this.book = book; 
    } 

    public void actionPerformed(ActionEvent evt) { 
     BookFrame bookFrame = new BookFrame(book); 
     //... 
     bookFrame.setVisible(true); 
    } 
} 

然後,你可以創建你的按鈕類似...

for (Book book : listOfBooks) { 
    JButton btn = new JButton(book.getTitle()); 
    btn.addActionListener(new BookActionHandler(book)); 
    //... 
} 

你可以...

使用Action API給定的「書」與按鈕相關聯,使Action配置按鈕以及爲按鈕點擊時提供執行所需操作的方法...

有關詳細信息,請參閱How to Use Actions ...

喜歡的東西...

public class BookActionHandler extends AbstractAction { 
    private Book book; 
    public BookActionHandler(Book book) { 
     this.book = book; 
     putValue(NAME, book.getTitle()); 
     putValue(LARGE_ICON_KEY, book.getIcon()); 
    } 

    public void actionPerformed(ActionEvent evt) { 
     BookFrame bookFrame = new BookFrame(book); 
     //... 
     bookFrame.setVisible(true); 
    } 
} 

然後,你可以創建你的按鈕類似...

for (Book book : listOfBooks) { 
    JButton btn = new JButton(new BookActionHandler(book)); 
    //... 
} 
0

我想通了,所以我會張貼在這裏萬一別人有相同的問題:

class BookListener implements ActionListener{ 
     public Book myBook; 
     public BookListener(Book b) { 
      this.myBook = b; 
     } 
    public void actionPerformed(ActionEvent e) { 

您只需將其插入到類定義中,並在調用actionListener時:

bookButton.addActionListener(new BookListener(b));