2014-12-03 58 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));