Add an actionListener to a JButton from another class

只愿长相守 提交于 2019-11-27 08:36:06

问题


so I have two classes testPanel and testFrame. All the buttons are in the testPanel class. I want to add ActionListeners to the Jbuttons in the testFrame class. How do I go about doing this?

testPanel:

public class testPanel extends JPanel{

JLabel codeLbl = new JLabel("Code");
JLabel titleLbl = new JLabel("Title");
JLabel priceLbl = new JLabel("Price");

JTextField codeTxt = new JTextField(20);
JTextField titleTxt = new JTextField(20);
JTextField priceTxt = new JTextField(20);

JButton addBtn = new JButton("Add");
JButton updateBtn = new JButton("Update");
JButton delBtn = new JButton("Delete");
JButton exitBtn = new JButton("Exit");
JButton firstBtn = new JButton("First");
JButton prevBtn = new JButton("Previous");
JButton nextBtn = new JButton("Next");
JButton lastBtn = new JButton("Last");

JPanel info = new JPanel();
JPanel buttons = new JPanel();

public testPanel(){
    info.setLayout(new GridLayout(3,2));

    info.add(codeLbl);
    info.add(codeTxt);
    info.add(titleLbl);
    info.add(titleTxt);
    info.add(priceLbl);
    info.add(priceTxt);

    buttons.setLayout(new GridLayout(2,4));

    buttons.add(addBtn);
    buttons.add(updateBtn);
    buttons.add(delBtn);
    buttons.add(exitBtn);
    buttons.add(firstBtn);
    buttons.add(prevBtn);
    buttons.add(nextBtn);
    buttons.add(lastBtn);

    JPanel container = new JPanel();
    container.setLayout(new BorderLayout());

    container.add(BorderLayout.CENTER, info);
    container.add(BorderLayout.SOUTH, buttons);

    add(container);
}
}

testFrame:

 public class testFrame extends JFrame{
JPanel p = new testPanel();

public testFrame(){
    super("BLAH");        

    this.getContentPane().add(p);setVisible(true);
    pack();
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args){
    new testFrame();
}

}


回答1:


First of all, I would be opposed to simply providing public access to the button in the panel, this leads to too many issues with management and scope of responsibility ... IMHO

You need some kind of reference to the testPane, which would then provide functionality to attach a ActionListener. Then it's up to testPane to manage how that gets done.




回答2:


Here is what you can do :

1. First create a class that extends JPanel

2. In that class, define a setActionListener method like this :

public void setButtonsActionListener(ActionListener listener){
   // and in here set your buttons action listeners

   button1.addActionListener(listener);
   button2.addActionListener(listener);
   ...

}

3, In the JFrame class , call the panel's setButtonsActionListener method with an anonymous implementation of the ActionLister interface :

    thePanel.setButtonsActionListener(new ActionListener(){
        @Override
        void actionPerformed(ActionEvent e){
            // here do what you gotta do when the button is clicked
        }

    });



回答3:


Well you could try this (which would require you to have an instance of the testPanel class and the button1 to be set to public:

testFrame.button1.setActionListener(new ActionListener(@Override public void actionPerformed(ActionEvent event){}});

Or you could make a function inside of the testPanel that sets the action listener.



来源:https://stackoverflow.com/questions/19104014/add-an-actionlistener-to-a-jbutton-from-another-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!