JButton上的ActionListener()无法正常工作(即使我以相同的方式编写其他按钮)

时间:2018-05-28 02:54:17

标签: java swing jbutton

我知道有类似的问题已被提出,但每个人的代码都不同,他们的错误解决方案并没有真正帮助我找到解决方案。

//Libraries
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;


public class SliderGame implements ActionListener  {
    JLabel referenceLabel1;
    JLabel instruc1;
    JLabel preGame1;
    JButton gotIt1;
    JButton addPicture1;
    JPanel instructionsPanel1;
    JPanel gameboardFoundation1;

    public SliderGame(){

     //Image that shows user what their objective is
     referenceLabel1 = new JLabel(new ImageIcon("Images/SliderEasy.jpg"));
     referenceLabel1.setBounds(100,150,300,300);
     referenceLabel1.setVisible(true);
     easyBackground.add(referenceLabel1);

     //"your objective" pregame = before the game starts
     preGame1 = new JLabel("Your objective:");
     preGame1.setBounds(500,150,300,100);
     preGame1.setFont(new Font ("Courier New", Font.ITALIC, 28));
     preGame1.setVisible(true);
     easyBackground.add(preGame1);

     //Tells you the instructions
     instruc1 = new JLabel ("<html>Use the mouse & click to move piece into 
     the blank spot to get the numbers in order, as shown on the left -- As 
     fast as you can!<html>");
     instruc1.setBounds(500, 190, 300, 200);
     instruc1.setFont(new Font ("Courier New", Font.PLAIN, 20));
     instruc1.setVisible(true);
     easyBackground.add(instruc1);

     //Press to play
     gotIt1 = new JButton ("Got it!");
     gotIt1.setBounds(500, 375, 100, 50);
     gotIt1.setFont(new Font ("Courier New", Font.PLAIN, 12));
     gotIt1.setVisible(true);
     easyBackground.add(gotIt1);
     gotIt1.addActionListener(this);

     //Press to choose images from a library
     addPicture1 = new JButton ("Use Picture");
     addPicture1.setBounds(615, 375, 135, 50);
     addPicture1.setFont(new Font ("Courier New", Font.PLAIN, 12));
     addPicture1.setVisible(true);
     easyBackground.add(addPicture1);   
     addPicture1.addActionListener(this); 

     //Panel that holds the gameboard
     gameboardFoundation1 = new JPanel();
     gameboardFoundation1.setLayout(new GridLayout(3,3,3,3));
     gameboardFoundation1.setBounds(100, 150, 300, 300);
     gameboardFoundation1.setOpaque(false);
     gameboardFoundation1.setVisible(false);
     easyBackground.add(gameboardFoundation1);
}

    public void actionPerformed (ActionEvent e) {

        if(e.getSource().equals(gotIt1)) {

        preGame1.setVisible(false);
        instruc1.setVisible(false);
        gotIt1.setVisible(false);
        addPicture1.setVisible(false);
        referenceLabel1.setVisible(false);

        gameboardFoundation1.setVisible(true);

    }
} 

我没有包含我的所有代码,所以例如mainFrame.add()的实例,mainFrame存在,只是我没有将它添加到问题中。代码一直工作,直到我点击JButton gotIt1并且没有任何变化。这很奇怪,因为我格式化了我在整个程序中使用的所有其他按钮,它们工作得很好。

我是初学者,特别是在GUI上。我知道我的代码可能不是最干净的,但除此之外。为什么我的按钮不工作??

提前致谢。

2 个答案:

答案 0 :(得分:0)

由于多种原因,您的按钮无效。例如,存在语法错误(以actionPerformed方法为根)。你有一个额外的开放大括号,没有关闭if语句。其次,使用您拥有的代码(假设您修复了语法错误),您无法区分这两个操作。它们都会导致调用相同的方法,因为您使用了相同的动作侦听器(也是不推荐的类)。

修复语法错误,然后将代码添加到在if语句中执行不同操作的方法中,并将当前代码放在else块中(反之亦然)。

答案 1 :(得分:0)

根据您的可用代码......

referenceLabel1.setVisible(false);

导致NullPointerException。如果我将actionPerformed方法改为更像......

public void actionPerformed(ActionEvent e) {

    if (e.getSource().equals(gotIt1)) {

        preGame1.setVisible(false);
        instruc1.setVisible(false);
        gotIt1.setVisible(false);
        addPicture1.setVisible(false);
        //referenceLabel1.setVisible(false);

        gameboardFoundation1.setVisible(true);

    }
}

隐藏了UI组件(如果我更改了gameboardFoundation1的背景颜色并使其变得不透明,则会显示)

现在,我强烈建议您花些时间阅读Laying Out Components Within a Container,尤其是How to Use CardLayout,其目的是让您轻松切换多个视图

如果这无法解决您的问题,请考虑提供展示您问题的Minimal, Complete, and Verifiable example