简体   繁体   English

将ActionListener添加到自定义组件

[英]Adding an ActionListener to a custom component

I have a custom component (which extends JPanel ). 我有一个自定义组件( extends JPanel )。

It looks something like this: 看起来像这样:

自定义组件

My question is: When I use it in another JFrame , how do i add an ActionListener to it, so that when I click any of the button it'll execute code in the actionPerformed ? 我的问题是:当我在另一个JFrame使用它时,如何向其中添加ActionListener ,以便当我单击任何按钮时,它将在actionPerformed执行代码?

I tried adding a MouseListener to it, but it didn't work. 我尝试向其中添加一个MouseListener ,但是没有用。

EDIT: I'm sorry I'm not very clear on the component: It consist of two JButtons (the "-" and "+") and a JTextField . 编辑:对不起,我在组件上不是很清楚:它由两个JButtons (“-”和“ +”)和一个JTextField When the user clicks on either of them, the number in the middle increases or decreases. 当用户单击其中任何一个时,中间的数字将增加或减少。 All these 3 components are placed inside a JPanel . 所有这三个组件都放置在JPanel

EDIT 2: Here is the source code: 编辑2:这是源代码:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EtchedBorder;

@SuppressWarnings("serial")
public class ZoomSelector extends JPanel {
    protected JButton btnDecrement;
    protected JTextField txtNumber;
    protected JButton btnIncrement;

    private String currentValue, previousValue;

    public ZoomSelector() {
        setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
        initGUI();

        txtNumber.setText("12");
        currentValue = "12";

        setSize(new Dimension(125, 26));
        validate();
    }

    public boolean hasChanged() {
        if(currentValue.equals(previousValue)) {
            return true;
        }
        else {
            return false;
        }
    }

    public String getText() {
        return txtNumber.getText();
    }

    public void reset() {
        previousValue = txtNumber.getText();
        txtNumber.setText("12");
        currentValue = "12";
    }

    @Override
    public void setEnabled(boolean e) {
        btnDecrement.setEnabled(e);
        txtNumber.setEnabled(e);
        btnIncrement.setEnabled(e);
    }

    public void increment() {
        previousValue = txtNumber.getText();
        int number = Integer.parseInt(txtNumber.getText());
        if(number < 20) {
            number++;
            txtNumber.setText("" + number);
            currentValue = "" + number;
        }       
    }

    public void decrement() {
        previousValue = txtNumber.getText();
        int number = Integer.parseInt(txtNumber.getText());
        if(number > 0) {
            number--;
            txtNumber.setText("" + number);
            currentValue = "" + number;     
        }       
    }

    private void initGUI() {

        btnDecrement = new JButton("-");
        btnDecrement.setFont(new Font("Tahoma", Font.BOLD, 14));
        btnDecrement.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                decrement();
            }
        });
        setLayout(new BorderLayout(0, 0));
        add(btnDecrement, BorderLayout.WEST);

        txtNumber = new JTextField();
        txtNumber.setHorizontalAlignment(SwingConstants.CENTER);
        txtNumber.setText("0");
        txtNumber.setEditable(false);
        add(txtNumber, BorderLayout.CENTER);
        txtNumber.setColumns(2);

        btnIncrement = new JButton("+");
        btnIncrement.setFont(new Font("Tahoma", Font.BOLD, 14));
        btnIncrement.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                increment();
            }
        });
        add(btnIncrement, BorderLayout.EAST);
    }
}

Just use JSpinner. 只需使用JSpinner。 It is an easy way to move a value up or down. 这是向上或向下移动值的简单方法。 EXAMPLE BY Java tutorials: http://docs.oracle.com/javase/tutorialJWS/uiswing/components/ex6/SliderDemo.jnlp Java范例范例: http//docs.oracle.com/javase/tutorialJWS/uiswing/components/ex6/SliderDemo.jnlp

I added an action listener to a custom Swing component here: JCropFrame 我在这里向自定义的Swing组件添加了一个动作监听器: JCropFrame

You have to create your own EventListener and extend AWTEvent and AWTEventMulticaster 您必须创建自己的EventListener并扩展AWTEventAWTEventMulticaster

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM