我是java和编程的新手,我正在编写一个包含菜单的程序。 (它是java中的JFrame)它的作用是当你点击JButton时,它会在屏幕上显示一个applet。小程序完成后,它会进入一个屏幕,您可以选择再次运行小程序,或者在按下按钮时返回主菜单。问题是当你按下按钮返回菜单时,它没有。它所做的只是让按钮都不可点击。 这是我用来绘制菜单的方法:
public static void drawMenu()
{
f.add(BOption1);
f.add(BOption2);
}
两个jbuttons已经在构造函数中声明了,并且它们在我第一次运行菜单时工作正常。然后,当您点击其中一个按钮时,它会使用f.remove(...)从屏幕上删除这两个按钮。当我第二次调用这种方法时,有谁知道为什么它不起作用?
编辑: 对不起,我的意思是说帆布,而不是小程序。
修改编辑: 我找到了问题的解决方案,但无论如何,谢谢。
答案 0 :(得分:1)
以下是主要类的代码:Frame:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Frame extends JFrame {
static OnePlayer onePlayer;
static TwoPlayer twoPlayer;
static Frame f;
static JButton BOnePlayer = new JButton("Single Player");
static JButton BTwoPlayer = new JButton("Multiplayer");
static JButton BInstructions = new JButton("Instructions");
static JButton toMenu;
static JButton replay;
public Frame(String name) {
super(name);
this.setTitle(name);
this.setVisible(true);
this.setSize(640, 673);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setLayout(null);
this.setBackground(Color.GRAY);
BOnePlayer.setBounds(120, 150, 400, 100);
BTwoPlayer.setBounds(120, 250, 400, 100);
BInstructions.setBounds(120, 350, 400, 100);
BOnePlayer.setFont(new Font("Comic Sans MS", Font.ITALIC, 20));
BTwoPlayer.setFont(new Font("Comic Sans MS", Font.ITALIC, 20));
BInstructions.setFont(new Font("Comic Sans MS", Font.ITALIC, 20));
BOnePlayer.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Container onePane = f.getContentPane();
onePane.setLayout(new GridLayout(1, 1));
onePlayer = new OnePlayer();
onePane.add(onePlayer);
onePlayer.init();
f.remove(BOnePlayer);
f.remove(BTwoPlayer);
f.remove(BInstructions);
}
});
BTwoPlayer.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Container twoPane = f.getContentPane();
twoPane.setLayout(new GridLayout(1, 1));
twoPlayer = new TwoPlayer();
twoPane.add(twoPlayer);
twoPlayer.init();
f.remove(BOnePlayer);
f.remove(BTwoPlayer);
f.remove(BInstructions);
}
});
BInstructions.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
}
public static void main(String[] args) {
f = new Frame("Snake");
drawMenu();
}
public static void OnePlayerDone(int score) {
}
public static void TwoPlayerDone(int winner, int p1score, int p2score) {
f.remove(twoPlayer);
replay = new JButton("Play Again");
toMenu = new JButton("Return to Menu");
replay.setBounds(120, 100, 400, 100);
toMenu.setBounds(120, 500, 400, 100);
replay.setFont(new Font("Comic Sans MS", Font.ITALIC, 20));
toMenu.setFont(new Font("Comic Snas MS", Font.ITALIC, 20));
f.add(replay);
f.add(toMenu);
replay.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Container twoPane = f.getContentPane();
twoPane.setLayout(new GridLayout(1, 1));
twoPlayer = new TwoPlayer();
twoPane.add(twoPlayer);
twoPlayer.init();
}
});
toMenu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
drawMenu();
}
});
}
public static void drawMenu() {
f.add(BOnePlayer);
f.add(BTwoPlayer);
f.add(BInstructions);
}
}
建议:
Frame
以外的其他课程。这是一个密切相关的核心Java类的名称,相当于JFrame的AWT,你赋予它相同的名称会让很多人感到困惑。也许称之为SnakeFrame
。this
,如果你愿意的话。setBounds(...)
。答案 1 :(得分:0)
这不是答案,将被删除,但我需要发布更复杂的评论:
我正在编写一个包含菜单的程序。 (它是java中的JFrame)它的作用是当你点击JButton时,它会在屏幕上显示一个小程序。
你能解释一下你为什么要这样做吗? JFrame将applet显示为applet是最不寻常和最困难的。你是通过使用一些独立的applet查看器启动applet来做到这一点的吗?也许你正在做其他事情,比如显示一个对话框或另一个JFrame,但用错误的术语来描述它?
小程序完成后,会进入一个屏幕,您可以选择再次运行小程序,或者在按下按钮时返回主菜单。
你是如何实现这一目标的?您使用什么代码?
问题是,当您按下按钮返回菜单时,它不会。它所做的只是让按钮都不可点击。这是我用来绘制菜单的方法:
public static void drawMenu()
{
f.add(BOption1);
f.add(BOption2);
}
当我第二次调用此方法时,有谁知道为什么它不起作用?
不知何故,您的代码正在改变您的程序状态,从而使您的JButtons无响应。它是如何做到的 - 你没有告诉我们足够让我们说出来。
我不确定我们是否有足够的信息来回答您的问题。请显示更多代码,并为我们提供更详细和准确的描述。如果您可以发布sscce,那就最好。