相当绿色关于javas组件的东西等,所以请原谅我,如果我提供的信息是不够的!
请参阅以下代码。在框架中添加菜单和菜单显示,没有问题。我想知道何时调用gameOn()来删除菜单,而不是启动游戏。下面的代码仅使框架表面为“空白”,未添加游戏面板。
对如何修复它有何想法/建议?菜单面板上有一个鼠标听筒。
public class GameFrame extends JFrame {
private MenuPanel mp; //extends JPanel
private GamePanel gp; //extends JPanel
public GameFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(new Dimension(GameFrame.XSIZE, GameFrame.YSIZE));
setLocationRelativeTo(null);
setVisible(true);
mp = new MenuPanel(this);
add(mp);
}
public void gameOn() {
remove(mp);
GamePanel gp = new GamePanel(5);
add(gp);
}
}
在移除一个面板并添加另一个面板后,需要进行重新绘制,在将组件添加到框架后,应该进行设置可见(true),我建议在EDT线程上进行大量UI更改,以避免干扰。
添加GamePanel后,执行验证(validate()
public void gameOn() {
remove(mp);
gp = new GamePanel(5);
add(gp);
validate();
}
不要试图添加或删除组件,而是使用卡片布局
CardLayout cardLayout = new CardLayout();
JPanel mainPanel = new JPanel(cardLayout);
MenuPanel menu = new MenuPanel();
GamePanel game = new GamePanel();
mainPanel.add(menu, "menu");
mainPanel.add(game, "game");
...
public void gameOn() {
cardLayout.show(mainPanel, "game");
}
调用gameOn()
时,菜单将被推到后面,游戏将被推到前面。
这样你就不必一直添加和删除
下面是一个可以运行的示例
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class GameFrame extends JFrame implements ActionListener{
CardLayout cardLayout;
JPanel mainPanel;
MenuPanel menu;
GamePanel game;
public GameFrame() {
cardLayout = new CardLayout();
mainPanel = new JPanel(cardLayout);
menu = new MenuPanel();
game = new GamePanel();
mainPanel.add(menu, "menu");
mainPanel.add(game, "game");
JButton goGame = new JButton("Go TO Game");
goGame.addActionListener(this);
add(mainPanel);
add(goGame, BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationByPlatform(true);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
gameOn();
}
public void gameOn() {
cardLayout.show(mainPanel, "game");
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
GameFrame gameFrame = new GameFrame();
}
});
}
}
class MenuPanel extends JPanel {
public MenuPanel() {
setBackground(Color.GREEN);
add(new JLabel("Menu"));
}
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 300);
}
}
class GamePanel extends JPanel {
public GamePanel() {
setBackground(Color.BLUE);
add(new JLabel("Game"));
}
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 300);
}
}
我正在写一个俄罗斯方块游戏。当应用程序启动Jlabel时,打开按钮“Play”。如何在现有的JFrame中切换到不同的标签(板)?
所以,我试图为一个简单的游戏制作一个基本的功能菜单。我试图通过创建2个JPanels来做到这一点,一个用于实际游戏,另一个用于我的菜单。 我要做的是在我的菜单面板上有一个按钮,当按下这个按钮时,将显示在父JFrame中的JPanel从菜单切换到实际游戏的JPanel。 这是我的密码: 如你所见,我为我的开始按钮创建了一个监听器。在侦听器内部,我使用了一个time循环,通过方法到达JFrame。程序
问题内容: 在和之间切换的最有效方法是什么? 问题答案: 使用NOT的解决方案 如果值是布尔值,最快的方法是使用 not 运算符: 用减法求解 如果值是数字,则从总数中减去是切换值的一种简单快捷的方法: 使用XOR的解决方案 如果值在 0 和 1 之间切换,则可以使用按位异或: 该技术可以推广到任意一对整数。异或一步被替换为预异常数: (此想法由Nick Coghlan提交,后来由@zxxc推广。
我正在尝试实现一个按钮来在明暗之间切换。我有一个文件批准器,看起来像这样。。 所以当我设置getTheme(true)时,它会触发黑暗主题,而getTheme(false)会触发光明主题。问题来了,我想在中的一个组件中插入一个切换按钮,允许用户在这两个主题之间切换。本质上,组件将控制AppRouter的状态。可能吗? 你知道我从哪里开始吗?我正在使用react钩子和类型脚本。我试过各种方法,但都没
我看了很多页,试图找出如何切换场景,但都没有成功。 我有一个计算器,我的目标是选择一个菜单选项来更改计算器(即:基础和科学)。现在我只是在测试,所以这里是我到目前为止与这个问题相关的代码(我使用的是场景生成器): 编辑我已经尝试了很多东西。不管怎样,我总是得到这个NullPointerException。我有一种感觉,这可能与在场景生成器中设置某些内容有关,但我就是找不到答案 工作代码: 我使用下