我可以在Java中绘制的矩形上放置按钮吗?

我可以在Java中绘制的矩形上放置按钮吗?,java,button,draw,Java,Button,Draw,我想在我的游戏屏幕上创建并实现一个游戏。 是否可以创建一个额外的类“GameOver”,它有一个新的绘制对象,在屏幕中间绘制一个黑色矩形,并在绘制的矩形上有一些按钮,如“newgame” 或者最好的方式是什么 我的游戏正在JFrame上运行 如果您想查看特定的代码,请告诉我,我有很多类,因此很难显示所有内容,我认为这实际上不是这个问题所必需的。您可以使用另一种方法public boolean gameOver()来检测您的获胜条件。然后可以使用方法中的if语句返回true或false。对于屏幕,

我想在我的游戏屏幕上创建并实现一个游戏。 是否可以创建一个额外的类“GameOver”,它有一个新的绘制对象,在屏幕中间绘制一个黑色矩形,并在绘制的矩形上有一些按钮,如“newgame”

或者最好的方式是什么

我的游戏正在JFrame上运行


如果您想查看特定的代码,请告诉我,我有很多类,因此很难显示所有内容,我认为这实际上不是这个问题所必需的。

您可以使用另一种方法
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教程中的部分。