Java 如何创建自定义事件(它们必须位于netbeans调色板上)

Java 如何创建自定义事件(它们必须位于netbeans调色板上),java,swing,events,jpanel,jbutton,Java,Swing,Events,Jpanel,Jbutton,我已经为我的问题寻找了几个小时的解决方案,我用Java语言编写了一个新的程序,并且已经创建了一个包含6个自定义按钮的自定义面板,但是现在我需要创建一个可以检测我按下哪个按钮的事件,我用C完成了这项工作,但在Java中找不到方法 这段代码是用C编写的,但我当然需要一些与Java类似的东西 /// <summary> /// Enumerator with buttons states /// </summary> public enum EstadoBoton {

我已经为我的问题寻找了几个小时的解决方案,我用Java语言编写了一个新的程序,并且已经创建了一个包含6个自定义按钮的自定义面板,但是现在我需要创建一个可以检测我按下哪个按钮的事件,我用C完成了这项工作,但在Java中找不到方法

这段代码是用C编写的,但我当然需要一些与Java类似的东西

/// <summary>
/// Enumerator with buttons states
/// </summary>
public enum EstadoBoton
{
    Aceptar = 1,
    Nuevo = 2,
    Editar = 3,
    Cancelar = 4,
    Eliminar = 5,
    Imprimir = 6,
    Salir = 7
}
/// <summary>
/// Delegate method for buttons events
/// </summary>
/// <param name="edoBoton"></param>
public delegate void BotonPresionado(EstadoBoton edoBoton);

public partial class ctrlBotones : UserControl
{
    /// <summary>
    /// here I keep the state of the button
    /// </summary>
    private EstadoBoton estadoBoton;
    /// <summary>
    /// Event that manages the state of the button
    /// </summary>
    public event BotonPresionado BotonPresionado
    {
        add { this.botonpresion += value; }
        remove { this.botonpresion -= value; }
    }
    private BotonPresionado botonpresion;
    public ctrlBotones()
    {
        InitializeComponent();
    }

好的,Aaron Daw在某种程度上说,您希望创建自己的事件。这意味着对组件重用相同的代码

我曾经用这种方式尝试过自定义组件按钮、JMenu

public class MyMenu extends JMenu
{
public MyMenu(ImageIcon i,String s)
{
    super();
    setIcon(i);
    setText(s);
    setVerticalTextPosition(SwingConstants.BOTTOM);
    setHorizontalTextPosition(SwingConstants.CENTER);
}
}
为MyMenu创建对象,在这里我们不需要每次都添加属性,这是一个优势

我用同样的方法尝试了JButton的自定义侦听器,它正在工作。当你们点击按钮时,它会打印出按下的按钮 这是customEvent类

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;


public class CustomListener 
{
JButton button;
public CustomListener(JButton b)
{
button=b;

button.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource()==button)
        {
            System.out.println("button pressed");

        }
    }
});

}
}
这是主课

import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class MainClass extends JFrame
{
JButton jbutton;
public MainClass()
{
    setLayout(new FlowLayout());
    add(jbutton());
    setSize(800,600);
    setVisible(true);
}
public JButton jbutton()
{
    if(jbutton==null)
    {
        jbutton=new JButton("click");
        new CustomListener(jbutton);
    }
    return jbutton;
}

public static void main(String args[])
{
    new MainClass();
}
}
现在我可以重用actionListener了。

我的朋友

如果您正在寻找类似VisualStudio的用户界面,如easy drag drop

然后在netbeans中右键单击您的项目,然后单击new JFrame Form(如果没有),然后在其他项目中,您将有一个简单的拖放用户界面


然后从调色板中删除一个JButton,然后双击该JButton,然后您将获得该JButton的事件…

我只需向每个JButton添加一个ActionListener,可能是一个匿名内部类。查看ActionListener和JButton教程,了解更多有关如何执行此操作的信息:,JAVA新编程。。作为将来的参考,它是Java,而不是Java。感谢padman的回答,但我认为这并不完全是我需要的,我添加了更多为事件生成的代码,而且我真的需要可以在netbeans GUI上选择事件,我想我完全可以使用我发布的第一部分代码在C上完成。
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class MainClass extends JFrame
{
JButton jbutton;
public MainClass()
{
    setLayout(new FlowLayout());
    add(jbutton());
    setSize(800,600);
    setVisible(true);
}
public JButton jbutton()
{
    if(jbutton==null)
    {
        jbutton=new JButton("click");
        new CustomListener(jbutton);
    }
    return jbutton;
}

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