当前位置: 首页 > 知识库问答 >
问题:

试图为我的面板创建一个非常简单的按钮,但即使我在类中实现了动作侦听器,它也无法工作[关闭]

长孙宜
2023-03-14

编辑问题以包括所需的行为、特定问题或错误,以及再现问题所需的最短代码。这将帮助其他人回答这个问题。

我只是想让按钮在控制台中显示一些文本,但不管我做什么,这里都没有用的是button类的代码:

public class Button extends JButton implements ActionListener {
JButton button;
Button (){
    button = new JButton();
    this.setText("Click NOW");
    button.addActionListener(this);
    
    this.setForeground(Color.white);
    button.setBounds(300, 100, 100, 50);
    this.setBackground(Color.red);
    this.setBorder(null);
}
@Override
public void actionPerformed(ActionEvent e) {
    if (e.getSource()== button) {
        System.out.println("Display if you work");
    }
  }
}

没有显示错误,代码编译正确,只是没有在终端中显示文本。

共有2个答案

姬宝
2023-03-14

在actionPerformed方法中,在if语句中使用equals,如下所示:

if (e.getSource().equals(button)) {
   System.out.println("Display if you work");
}

它应该可以工作在这种情况下不起作用。

裴令秋
2023-03-14

这段代码创建了两个jbutton,一个是类内的按钮字段,您可以将动作侦听器添加到其中:

public class Button extends JButton implements ActionListener {
    JButton button; // here!

    Button (){
        button = new JButton();  // here!
        this.setText("Click NOW");
        button.addActionListener(this); // and add the listener here

另一个是扩展JButton的类的实例:

// here !!!
public class Button extends JButton implements ActionListener {
    // ....

这可能就是在其他地方显示的代码

Button button = new Button();

然后将此按钮添加到GUI。同样,这个“button”来自您的button类,它扩展了JButton,但没有添加动作侦听器。

您可以通过以下两种方式之一解决此问题:

  1. 不要在新类中创建新的JButton按钮字段,而是将ActionListener添加到该类的实例JButton中,例如:
public class Button1 extends JButton implements ActionListener {
    // JButton button;

    Button1() {
        // button = new JButton();
        this.setText("Click NOW");
        // button.addActionListener(this);
        this.addActionListener(this);

        this.setForeground(Color.white);
        // button.setBounds(300, 100, 100, 50); // You really don't want to do
        // this
        this.setBackground(Color.red);
        this.setBorder(null);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // no need for the if block
        // if (e.getSource() == button) {
        System.out.println("Display if you work");
        // }
    }
}

我自己使用数字2,使其成为一个方法,返回一个包含我感兴趣的属性的按钮:

private JButton createMyButton(String text) {
    JButton button = new JButton(text);
    button.setForeground(Color.WHITE);
    button.setBackground(Color.RED);
    button.setBorder(null);
    button.addActionListener(e -> {
        System.out.println("Display if you work");
    });
    
    return button;
}

旁注:

  • 避免给出与核心Java类冲突的类名,例如与Java冲突的类按钮。awt。按钮
  • 避免使用空布局和设置边界。虽然空布局和setBounds()似乎是新手创建复杂GUI的最简单和最好的方式,但您创建的GUI越摇摆,使用它们时会遇到越严重的困难。当GUI调整大小时,它们不会调整您的组件的大小,它们是一个需要增强或维护的皇家巫婆,当放置在滚动窗格中时,它们会完全失败,当在所有平台上或在与原始平台不同的屏幕分辨率上查看时,它们看起来非常糟糕

因此,您最好学习和使用布局管理器。您可以在此处找到布局管理器教程:布局管理器教程,您还可以在此处找到Swing教程和其他Swing资源的链接:Swing Info。

 类似资料:
  • 我只是想让按钮在控制台中显示一些文本,但不管我做什么,这里都没有用的是button类的代码: 没有显示错误,代码编译正确,只是没有在终端中显示文本。

  • 问题内容: 我正在尝试为我的RadioGroup创建一个onCheckedChanged侦听器,但是日食给我带来了麻烦。这是代码 并且从eclipse出现错误,建议将其更改为setOnClickListener / setOnDragListener以及其他。 在上面告诉我要添加未实现的方法,当我选择该选项时,它会添加以下内容: 所以我最终得到了这个: 它告诉我从我编写的方法中删除注释。 有人知道

  • 问题内容: 我有主要的应用程序在哪里与值表。然后,我单击“添加”按钮,新的CUSTOM(我自己创建)出现了JDialog类型弹出窗口。在这里,我可以输入值,打一些勾,然后单击“确认”。因此,我需要从对话框中读取该输入,以便可以将此值添加到主应用程序中的表中。按下“确认”按钮时如何收听,以便在此之后可以读取该值? 问题答案: 如果在用户按下后对话框消失,请确认: 你希望有对话的行为如同一个 模态 的

  • @override public void actionPerformed(ActionEvent e){ }

  • 我想根据单选按钮的选择设置文本框的可编辑选项?如何对单选按钮上的动作监听器进行编码?

  • 我做了一个简单的排序函数,但由于某种原因,它仍然返回原始列表。