java练习--拼图游戏之主游戏界面

本文详细介绍了使用Java实现拼图游戏的主界面,包括设计游戏主窗体、添加菜单栏、设置图片和背景图片、打乱图片、添加边框、重新开始游戏、移动图片、计步器、一键成功、关闭游戏和关于我们等功能。内容涵盖了JFrame、JMenuBar、JMenuItem、ImageIcon等组件的使用和相关代码实现。
摘要由CSDN通过智能技术生成

项目代码架构:

GameFrame是对游戏主体的设置

LoginFrame是对登录的设置

GameRun是游戏启动设置

Tool是工具类

先设计游戏主窗体:

GameRun类的代码:

import ayue.ui.GameFrameTest;

public class GameRun {
    public static void main(String[] args) {
        new GameFrame(580, 608, "拼图单机版 v1.0");
    }
}
import javax.swing.*;
import java.awt.*;

public class GameFrame extends JFrame {

    /**
     * 游戏主窗体构造器
     * width: 窗体宽  单位px
     * height:窗体高
     * title:标题
     */
    public GameFrame(int width, int height, String title){
        // 设置窗体样式
        this.initFrame(width, height, title);


        // 让页面显示
        this.setVisible(true);
    }

    // 窗体显示设置
    private void initFrame(int width, int height, String title){
        // 设置尺寸
        this.setSize(width, height);
        // 设置窗体的标题
        this.setTitle(title);
        // 设置屏幕在正中心
        this.setLocationRelativeTo(null);
        // 设置页面关闭模式
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
    }
}

结果:

添加菜单栏:使用JFrame中的setJMenuBar

源码:

 有关菜单的组件大概是:菜单栏  menu bar、菜单 menu、菜单项 menu item、单选按钮菜单项 radio button menu item、复选框菜单项 check box menu items 和分隔符 separators

本游戏中用到的是:菜单栏  menu bar、菜单 menu、菜单项 menu item

三者的关系是:菜单项加载在菜单里,菜单加载在菜单栏里

对应的三个类是:JMenuBar、JMenu、JMenuItem

JMenuBar的描述:An implementation of a menu bar. You add JMenu objects to the menu bar to construct a menu. When the user selects a JMenu object, its associated JPopupMenu is displayed, allowing the user to select one of the JMenuItems on it.

JMenuBar添加菜单的源码 

JMenu中添加JMenuItem

菜单相关类的继承层次结构图:

  GameFrame

import javax.swing.*;
import java.awt.*;

public class GameFrame extends JFrame {

    /**
     * 游戏主窗体构造器
     * width: 窗体宽  单位px
     * height:窗体高
     * title:标题
     */
    public GameFrame(int width, int height, String title){
        // 设置窗体样式
        this.initFrame(width, height, title);

        // 添加菜单栏
        this.setJMenuBar(getJMenuBars());

        // 让页面显示
        this.setVisible(true);
    }

    // 窗体显示设置
    private void initFrame(int width, int height, String title){
        // 设置尺寸
        this.setSize(width, height);
        // 设置窗体的标题
        this.setTitle(title);
        // 设置屏幕在正中心
        this.setLocationRelativeTo(null);
        // 设置页面关闭模式
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    // 设置菜单
    private JMenuBar getJMenuBars(){
        // 创建JMenuBar对象
        JMenuBar jMenuBar = new JMenuBar();

        // 创建菜单
        JMenu functionMenu = new JMenu("功能");

        // 创建选项中的三个小的条目
        JMenuItem replayItem = new JMenuItem("重新游戏");
        JMenuItem reLoginItem = new JMenuItem("重新登录");
        JMenuItem closeItem = new JMenuItem("关闭游戏");
        // 将条目添加到选项里
        functionMenu.add(replayItem);
        functionMenu.add(reLoginItem);
        functionMenu.add(closeItem);

        JMenu aboutMenu = new JMenu("关于我们");
        JMenuItem accountItem = new JMenuItem("公众号");
        aboutMenu.add(accountItem);

        // 把菜单添加到菜单栏
        jMenuBar.add(functionMenu);
        jMenuBar.add(aboutMenu);

        return jMenuBar;
    }
}

效果图:

 

添加图片

添加图片需要用到对象:ImageIcon

ImageIcon其中两个构造器:

因为ImageIcon不是一个组件,所以它要先加载到JLabel中

JLable是一个管理文字和图片的组件:

A display area for a short text string or an image, or both.

JLabel其中一个构造器:

或者:

 也可以使用setIcon方法:

JFrame、RootPane、ContentPane 

在把JLabel加载到窗体中时需要使用getContentPane方法:

JFrame中的getContentPane方法

 JFrame中的getRootPane

 从上面的截图中可以看出RootPane是JFrame的属性

 RootPane是根窗格、ContentPane是内容窗格

在官方文档中这样描述:

Each top-level container relies on a reclusive intermediate container called the root pane. The root pane manages the content pane and the menu bar, along with a couple of other containers. You generally don't need to know about root panes to use Swing components. However, if you ever need to intercept mouse clicks or paint over multiple components, you should get acquainted with root panes.

每个顶层的容器都依赖于一个被称为根窗格的隐蔽的中间容器。根窗格管理着内容窗格和菜单栏,以及其他几个容器。你一般不需要了解根窗格来使用Swing组件。然而,如果你需要拦截鼠标点击或在多个组件上作画,你应该熟悉根窗格

以下是根窗格提供给框架(以及所有其他顶级容器)的组件列表:

We've already told you about the content pane and the optional menu bar. The two other components that a root pane adds are a layered pane and a glass pane. The layered pane contains the menu bar and content pane, and enables Z-ordering of other components. The glass pane is often used to intercept input events occuring over the top-level container, and can also be used to paint over multiple components.

我们已经向您介绍了内容窗格和可选菜单栏。根窗格添加的另外两个组件是分层窗格和玻璃窗格。分层窗格包含菜单栏和内容窗格,并启用其他组件的 Z 排序。玻璃窗格通常用于拦截发生在顶级容器上的输入事件,也可用于绘制多个组件。

 JRootPane的组件属性:

添加背景图片

import javax.swing.*;
import java.awt.*;

public class GameFrame extends JFrame {

    /**
     * 游戏主窗体构造器
     * width: 窗体宽  单位px
     * height:窗体高
     * title:标题
     */
    public GameFrame(int width, int height, String title){
        // 设置窗体样式
        this.initFrame(width, height, title);

        // 添加菜单栏
        this.setJMenuBar(getJMenuBars());

        // 添加背景图片
        this.addBackgroundImage();

        // 让页面显示
        this.setVisible(true);
    }

    // 窗体显示设置
    private void initFrame(int width, int height, String title){
        // 设置尺寸
        this.setSize(width, height);
        // 设置窗体的标题
        this.setTitle(title);
        // 设置屏幕在正中心
        this.setLocationRelativeTo(null);
        // 设置页面关闭模式
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    // 设置菜单
    private JMenuBar getJMenuBars(){
        // 创建JMenuBar对象
        JMenuBar jMenuBar = new JMenuBar();

        // 创建菜单
        JMenu functionMenu = new JMenu("功能");

        // 创建选项中的三个小的条目
        JMenuItem replayItem = new JMenuItem("重新游戏");
        JMenuItem reLoginItem = new JMenuItem("重新登录");
        JMenuItem closeItem = new JMenuItem("关闭游戏");
        // 将条目添加到选项里
        functionMenu.add(replayItem);
        functionMenu.add(reLoginItem);
        functionMenu.add(closeItem);

        JMenu aboutMenu = new JMenu("关于我们");
        JMenuItem accountItem = new JMenuItem("公众号");
        aboutMenu.add(accountItem);

        // 把菜单添加到菜单栏
        jMenuBar.add(functionMenu);
        jMenuBar.add(aboutMenu);

        return jMenuBar;
    }

    // 添加背景图片
    private void addBackgroundImage(){
        ImageIcon imageIcon = new ImageIcon("puzzlegame/image/background.png");
        JLabel jLabel = new JLabel(imageIcon);
        this.getContentPane().add(jLabel);
    }
}

 运行效果:

 因为在加载JLabel时先添加的会处于上层,因此需要先添加游戏的拼图图片:

试着添加一张:

    // 添加拼图图片
    private void addPuzzleImage(){
        JLabel jLabel = new JLabel(new ImageIcon("puzzlegame/image/animal/animal1/1.jpg"));
        this.getContentPane().add(jLabel);

    }

 效果:

在添加图片时图片会默认居中,如果要使图片在你设置的位置出现就需要取消默认的居中放置,并指定位置

使用setLayout方法设置LayoutManager为null取消居中

默认居中由来:

JFrame

JRootPane

 

JFrame中的setLayout

 未使用setLayout(null)时设置图片位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值