包含信息的Java ActionListeners
问题描述:
我有一个程序,我想单击按钮并让它们将信息传递给它们的actionListeners。这是一个图书馆程序,用户点击图书图像,打开一个新的JFrame与关于该书的信息。如何根据按下哪个按钮来制作单独显示的信息? (我想一个通用的ActionListener,而不是个别的,因为我有超过200本书。)包含信息的Java ActionListeners
答
你可以...
使用键的按钮,它的价值链接到它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));
//...
}
答
我想通了,所以我会张贴在这里万一别人有相同的问题:
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));
这似乎是一个很基本的问题,一点研究就可以解决。 [使用按钮的oracle教程](https://docs.oracle.com/javase/tutorial/uiswing/components/button.html)涵盖了这一点。 – 2014-12-03 23:26:09