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

试图为我的面板创建一个非常简单的按钮,但即使我在类中实现了动作侦听器,它也不起作用

漆雕深
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添加到thisJButton,该类的实例,例如:
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信息。

 类似资料:
  • 编辑问题以包括所需的行为、特定问题或错误,以及再现问题所需的最短代码。这将帮助其他人回答这个问题。 我只是想让按钮在控制台中显示一些文本,但不管我做什么,这里都没有用的是button类的代码: 没有显示错误,代码编译正确,只是没有在终端中显示文本。

  • 我有一个按钮,我给了角半径属性。在xml代码中,应用程序似乎是弯曲的,但当我运行应用程序时,按钮是矩形的。 我也用材质按钮代替了这个按钮,但还是发生了同样的事情。它在XML设计中似乎是弯曲的,但在应用程序中却不是。

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

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

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

  • 我有组织。postgresql。util。PSQLException:错误:关系“roles”不存在,我不知道为什么。 实体类 资源/META-INF/持久性。xml 在我有 那么为什么我有这样的错误,为什么会这样?我读过这个问题,它对我没有帮助。