我有一个程序,我想点击按钮并让它们将信息传递给他们的actionListeners。它是一个库程序,用户点击书籍图像,打开一个新的JFrame,其中包含有关该特定书籍的信息。如何根据按下哪个按钮单独显示信息? (我想要一个通用的actionListener而不是个别的,因为我有超过200本书。)
答案 0 :(得分: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));
//...
}
答案 1 :(得分: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));