在创建自定义JButton(即图像)时遇到问题。我使用普通的JButton(就像第2行的注释中那样)进行所有操作,这样我就不必获得输入流,并且启动按钮时有一个图标。我遇到的麻烦是,当我按下“重放”按钮(再次播放)时,窗口关闭,只有一个窗口应该弹出(就像“普通”JButton发生的那样),但在这种情况下,有4-5个窗口重新打开,我不知道为什么。
我开始认为这是因为获得InputStream
并执行ImageIO.read()
的时间,游戏将启动,并看到变量运行为false,然后开始重新打开窗口,直到它为true,但我不知道如何验证。
注意:我的函数在ActionPerformed时验证snake是否发生冲突,如果发生冲突,将调用running=false
和gameover()
public class GamePanel extends JPanel implements ActionListener {
JButton replay; //= new JButton("Play Again");
GamePanel() {
...
try {
InputStream is_replay = this.getClass().getResourceAsStream("/Snake/lib/img/playagain.png");
ImageIcon icon = new ImageIcon(ImageIO.read(is_replay));
replay = new JButton(icon);
replay.setBorder(BorderFactory.createEmptyBorder());
replay.setContentAreaFilled(false);
...
} catch (IOException|FontFormatException e) {
e.printStackTrace();
}
this.add(replay);
replay.setVisible(false);
replay.setBounds(SCREEN_WIDTH/2 - 100, SCREEN_HEIGHT - 200, 200, 100);
...
startGame();
}
public void startGame() {
spawnApple();
running = true;
timer = new Timer(DELAY, this);
timer.start();
}
public void gameOver(Graphics g) {
...
replay.setVisible(true);
replay.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == replay) {
JComponent comp = (JComponent)e.getSource();
Window win = SwingUtilities.getWindowAncestor(comp);
win.dispose(); //It will close the current window
new GameFrame(); //It will create a new game
}
}
});
}
}
public class GameFrame extends JFrame {
GameFrame() {
JPanel panel = new GamePanel();
this.add(panel);
panel.setLayout(null); //Needed to add components
this.setTitle("Snake Game");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.pack(); //Fit JFrame to the components
this.setVisible(true);
this.setLocationRelativeTo(null);
}
}
public class SnakeGame {
public static void main(String[] args) throws Exception {
new GameFrame();
}
}
“在这种情况下,重新打开4-5个窗口”
这表明您可能正在向replay JButton添加多个ActionListeners。每次调用game over方法时都会添加一个新的侦听器,这是不正确的。我不会将ActionListener添加到game over方法中的按钮,而是在创建replay按钮的地方添加一次。
问题内容: 我可以在自定义按钮上使用showInputDialog,还是可以在showInputDialog上重命名“ OK”和“ Cancel”按钮。 问题答案: 每种方法都有很多变体。选择一个通常可以使您访问所需的功能级别。就您而言,您正在寻找 在此处查看其javadoc :。请注意,您不会在这里更改按钮的颜色(因为它们取决于外观),而是更改其文本(通常来说已经足够,因为您也可以在此处设置显示
我不知道以前有没有人问过这个问题。我要给我爸爸建一个计算器。他问我有没有办法用按钮定制。 我还没有完成任何代码。我打算尝试一些东西。我的研究结果一无所获。 这就是我想要实现的,我感觉它打破了android studio的编码法则。这就是概念: 想象一下计算器。数字上方有8个空白按钮。这些按钮通常具有百分比和sqrt等功能。,。。等 有人问我,他是否可以按住按钮,随意改变这些功能。 所以现在的问题是
此代码在启动时执行一次。然后JButton位于中间。加载下一个图像时再次执行,此时JButton已处于正确位置。 我已经尝试了很多方法,比如将JButton添加到JFrame中,将JPanels布局设置为null(使button不可见),重新绘制、打包、无效,但我尝试的一切似乎都不奏效。有人能指示Swing把那个JButton放在我的JFrame的右上角吗?非常感谢!
Swagger注释可以与发音和maven一起使用吗?我正在尝试添加swagger注释,但它不起作用,而是拾取默认的java doc注释。 尝试将scan或resourcePackage等参数添加到存在于swagger BaseConfig类中的expertion . XML的Swagger标记,但它似乎不支持这些参数。 pom中定义的依赖关系: Expuncate:groupId:com.webc
目标:我正在设计一个REST API,允许用户在HTTP GET请求的查询字符串上传递参数 http://fake.api.com/search?param1=123 实现:在服务器端,我有一个自定义模型绑定器,可以从请求querystring获取参数,并将其转换为C#对象,这样我的控制器操作方法就不必解析查询字符串。控制器动作方法签名看起来像 当我从Fiddler测试api并传递querystr
> 标高,同时具有自定义可绘制。 在用户触摸的地方启动涟漪效果。