Rashidek
Rashidek

Reputation: 1

Two different buttons in one Panel in my own Component

I'm trying to create JPanel with two different buttons which one of them increasing and second decreasing size of text or window. I have class with button declaration. Everything is working when I put these buttons on JFrame separately. I don't know how to get Action Listener in JPanel of each buttons. All I possibly do is listener of mouse click on JPanel... Could you help me? I'm really begginer with coding so be polite please :]

public class ButtonMy extends Component {
private ButtonIncrease increase;
private PropertyChangeSupport propertyChangeSupport;

public ButtonMy() {
    setPreferredSize(new Dimension(30,30));
    kolor = Color.blue;
    setForeground(kolor);


    propertyChangeSupport = new PropertyChangeSupport(this);
    increase = ButtonIncrease.Powieksz;

}   

public ButtonIncrease getIncrease() {
    return increase;
}

public void setIncrease(ButtonIncrease increase) {
    ButtonIncrease oldIncrease = this.increase;
    this.increase = increase;
    propertyChangeSupport.firePropertyChange("increase", oldIncrease, increase);
}

public void addPropertyChangeListener(PropertyChangeListener l) {
    propertyChangeSupport.addPropertyChangeListener(l);
}

public void removePropertyChangeListener(PropertyChangeListener l) {
    propertyChangeSupport.removePropertyChangeListener(l);
}


}

There is JPanel for bind 2 buttons. Here is the biggest problem :/ I'm lack of ideas.

public class ButtonB extends JPanel implements ActionListener{

public ButtonMy b1 = new ButtonMy();
public ButtonMy b2 = new ButtonMy();

public ButtonB (){

    init();
}
public final void init(){
    setLayout(new GridLayout(1,2));
    this.przycisk1.setIncrease(ButtonIncrease.Powieksz);
    this.przycisk2.setIncrease(ButtonIncrease.Zmniejsz);
    add(b1);
    add(b2);


}      

}

JFrame where I test this component is very common. Code below shows only function for inc and dec size when separate button is clicked (not in JPanel).

private void buttonMy3MouseClicked(java.awt.event.MouseEvent evt) {                                       
    switch(buttonMy3.getIncrease()) {
        case Powieksz: setSize(1);
            break;
        case Zmniejsz: setSize(0);
            break;
    }
}                                      

I didn't paste full of my code. There some of math functions left which I think they are not needed here (setSize for example).

Upvotes: 0

Views: 48

Answers (1)

Amjad k
Amjad k

Reputation: 11

I'm not sure if i understand the problem correctly but I think under the actionListener class you should have a method called actionPerformed& it will say that if button1 is clicked increase the number, if button2 is clicked decrease the number:

public void actionPerformed( ActionEvent event ) {
if (event.getSource()== b1) // your "increase size" code

if(event.getSource()== b2)// your "decrease size" code 
}

button listeners are actually different from mouse listeners; buttons implements ActionListeners and have the actionPerformed method with event variable. you could handle the event by: getSource() -this method is inherited from java.util.EventObject and returns the OBJECT on which the event initially occurred (the button itself) or by getActionCommand() -this method is available to action events, or any event that inherits from ActionEvent and returns the command STRING associated with this action. however mouse listeners implements MouseListener and has a lot of methods depending on what the mouse does (pressed, clicked, released, etc.).

Upvotes: 1

Related Questions