我可以在Java中绘制的矩形上放置按钮吗?
我想在我的游戏屏幕上创建并实现一个游戏。 是否可以创建一个额外的类“GameOver”,它有一个新的绘制对象,在屏幕中间绘制一个黑色矩形,并在绘制的矩形上有一些按钮,如“newgame” 或者最好的方式是什么 我的游戏正在JFrame上运行我可以在Java中绘制的矩形上放置按钮吗?,java,button,draw,Java,Button,Draw,我想在我的游戏屏幕上创建并实现一个游戏。 是否可以创建一个额外的类“GameOver”,它有一个新的绘制对象,在屏幕中间绘制一个黑色矩形,并在绘制的矩形上有一些按钮,如“newgame” 或者最好的方式是什么 我的游戏正在JFrame上运行 如果您想查看特定的代码,请告诉我,我有很多类,因此很难显示所有内容,我认为这实际上不是这个问题所必需的。您可以使用另一种方法public boolean gameOver()来检测您的获胜条件。然后可以使用方法中的if语句返回true或false。对于屏幕,
如果您想查看特定的代码,请告诉我,我有很多类,因此很难显示所有内容,我认为这实际上不是这个问题所必需的。您可以使用另一种方法
public boolean gameOver()
来检测您的获胜条件。然后可以使用方法中的if语句返回true或false。对于屏幕,您可以停止游戏循环,然后获取当前帧并使用JButtons在其顶部绘制另一个黑色或灰色矩形,以重新启动游戏/关卡。您应该每帧调用一次gameOver方法。下面是一个示例,说明您可能要执行的操作。你应该查看更多细节。
特别是布局管理器
,自定义绘制
,以及处理事件的侦听器。
我使用了一些匿名类,其中可能更喜欢显式类
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class GameScreen {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new GameScreen().start());
}
public void start() {
// this was quick and dirty. Best to have separate classes with proper overrides, etc.
JPanel panel = new JPanel() {
public Dimension getPreferredSize() {
return new Dimension(300, 130);
}
};
panel.setLayout(new FlowLayout());
JFrame frame = new JFrame("Game") {
@Override
public Dimension getPreferredSize() {
return new Dimension(500, 500);
}
};
// shared attributes
panel.setBackground(Color.black);
JTextField text = new JTextField();
Color orange = Color.orange;
Color maroon = new Color(176, 48, 96);
text.setPreferredSize(new Dimension(270, 80));
Font font = new Font("Ariel", Font.BOLD, 30);
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 1; // in the middle
gbc.gridy = 1; // of the screen
// game over stuff
text.setEditable(false);
text.setForeground(orange);
text.setBackground(maroon);
text.setFont(font);
text.setText(" GAME OVER!");
JButton quit = new JButton("Quit");
quit.addActionListener(ae -> System.exit(0)); // more complicated code should an
// inner class for this.
//new game stuff
JTextField newGameText = new JTextField();
newGameText.setText("READY TO RUMBLE!");
newGameText.setFont(font);
newGameText.setForeground(orange);
newGameText.setBackground(maroon);
JButton newGame = new JButton("New Game");
newGame.addActionListener(ae -> {
panel.setVisible(false);
frame.add(newGameText, gbc);
});
panel.add(text);
panel.add(quit);
panel.add(newGame);
frame.setLayout(new GridBagLayout());
frame.add(panel, gbc);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.repaint();
}
}
您可以,但是您必须使用按钮的绝对位置来确保它们保持在矩形内。我建议只使用JPanel按住按钮,并让面板背景颜色由您选择。然后使用适当的布局管理器将面板添加到框架中。在我看来,这会容易得多。@WJS谢谢。我如何在按钮旁边的屏幕上玩游戏呢?找不到很好的资源。我想在我的游戏屏幕上创建并实现一个游戏,只需使用模态JDialog来显示文本和按钮。如果愿意,可以取消装饰对话框。另一种选择是使用“玻璃窗格”。阅读上的Swing教程中的部分。