我知道有类似的问题已被提出,但每个人的代码都不同,他们的错误解决方案并没有真正帮助我找到解决方案。
//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上。我知道我的代码可能不是最干净的,但除此之外。为什么我的按钮不工作??
提前致谢。
答案 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