我自己的组件中的一个面板中有两个不同的按钮

Posted

技术标签:

【中文标题】我自己的组件中的一个面板中有两个不同的按钮【英文标题】:Two different buttons in one Panel in my own Component 【发布时间】:2018-06-03 15:23:35 【问题描述】:

我正在尝试使用两个不同的按钮创建 JPanel,其中一个按钮增大,第二个减小文本或窗口的大小。我有带按钮声明的课程。当我将这些按钮分别放在 JFrame 上时,一切正常。 我不知道如何在每个按钮的 JPanel 中获取 Action Listener。我可能做的就是监听鼠标点击JPanel ... 你可以帮帮我吗?我真的很喜欢编码,所以请礼貌:]

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




有用于绑定 2 按钮的 JPanel。这是最大的问题:/我缺乏想法。

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 很常见。下面的代码仅显示了单击单独按钮时的 inc 和 dec 大小的功能(不在 JPanel 中)。

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

我没有粘贴完整的代码。剩下的一些数学函数我认为这里不需要它们(例如 setSize)。

【问题讨论】:

【参考方案1】:

我不确定我是否正确理解了这个问题,但我认为在 actionListener 类下你应该有一个名为 actionPerformed& 的方法,它会说如果单击 button1 则增加数字,如果单击 button2 则减少数字:

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

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

按钮侦听器实际上与鼠标侦听器不同;按钮实现 ActionListeners 并具有带有 event 变量的 actionPerformed 方法。您可以通过以下方式处理 事件getSource() - 此方法继承自 java.util.EventObject 并返回最初发生事件的 OBJECT(按钮本身) 或通过 getActionCommand() - 此方法可用于操作事件,或任何从 ActionEvent 继承并返回与此操作关联的命令 STRING 的事件。 然而鼠标监听器实现了 MouseListener 并且有很多方法取决于鼠标的行为(按下、点击、释放等)。

【讨论】:

以上是关于我自己的组件中的一个面板中有两个不同的按钮的主要内容,如果未能解决你的问题,请参考以下文章

UI 面板没有根据屏幕尺寸定位自己

如何在 Reactjs 中给两个组件自己的状态?

微信小程序自定义事件

Delphi中的Form中怎么调用Frame,ShowFrame()好像可以

MUI折叠面板accordion中有个按钮,点击触发了折叠面板的事件

如何在框架中显示带有组件的面板