Java ActionListeners包括信息

时间:2014-12-03 23:16:55

标签: java user-interface actionlistener

我有一个程序,我想点击按钮并让它们将信息传递给他们的actionListeners。它是一个库程序,用户点击书籍图像,打开一个新的JFrame,其中包含有关该特定书籍的信息。如何根据按下哪个按钮单独显示信息? (我想要一个通用的actionListener而不是个别的,因为我有超过200本书。)

2 个答案:

答案 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));