• 0

Button Event Handler in a JList, Please help.


Question

Hi everyone,

I have created a small Java application which has a JList. The JList uses a custom cell renderer I named SmartCellRenderer. The SmartCellRenderer extends JPanel and implements the ListCellRenderer. I have added two buttons on the right side inside the JPanel of the SmartCellRenderer, since I want to buttons for each list item, and I have added mouse/action listeners for both buttons. However, they don't respond. It seems that the JList property overcomes the buttons underneath it. So the buttons never really get clicked because before that happens the JList item is being selected beforehand. I've tried everything. I've put listeners in the Main class, called Editor, which has the JList and also have listeners in the SmartCellRenderer itself and none of them get invoked.

I also tried a manual solution. Every time the event handler for the JList was invoked (this is the handler for the JList itself and not the buttons), I sent the mouse event object to the SmartCellRenderer to manually check if the point the click happened was on one of the buttons in order to handle it.

I used:

// Inside SmartCellRenderer.java

// e is the mouse event object being passed from the Editor whenever

// a JList item is selected or clicked on

Component comp = this.getComponent (e.getX(), e.getY())

if(!(comp instanceof JButton)) {

System.out.println("Recoqnizedt, but not a button click...");

//return;

} else {

System.out.println("Recognizedt, IT IS A MOUSE CLICK, PROCESSING...");

}

System.out.println("VALUEomp.toString());

What I realized is that not only this still doesn't work (it never realizes the component as a JButton) it also throws an exception for the last line saying comp is null. Meaning with the passed x,y position the getComponent() returns a null which happens when the coordinates passed to it are outside the range of the Panel. Which is a whole other problem?

I have yet to find an example on the web, using Google, that demonstrated using buttons inside a JList.

Can anyone help me with this. Thanks.

3 answers to this question

Recommended Posts

  • 0

might help if you post your code....

what you have to do is

create a button, assign the button a listener and then assign to the jlist.

I have no jdk at the moment, but here is some code

class MyList extends JList implements ActionListener
{

    JButton b1 = new JButton();
    JButton b2 = new JButton();

    public MyList()
   {
       super(); 
      b1.addActionListener(this);
      b2.addActionListener(this);
      this.add(b1);
      this.add(b2);
   }

   public actionPerformed(ActionEvent e)
  { 
     System.out.println(e.toString());
   }
}

  • 0

I know the above code isnt what you are looking for, but your key problem is that you have not hooked your buttons into a listener. ie. addActionListener(this).

this is why you never here calls from the button being pressed, because nothing registered to listening for the event

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.