java版连连看精美UI
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/tongue.gif)
![](/assets/blank.gif)
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/tongue.gif)
package com.yunzhi.lianliankan;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Lianliankanextends JFrameimplements WindowListener,ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* @param args
*/
JPanel panel;
JButton button;
JLabel label;
ImageIcon img;
Dimension screen;
int SCRW,SCRH;
int COLS,ROWS;
int activity;
int imgw,imgh;
public Lianliankan()
{
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗口关闭操作方式
screen=Toolkit.getDefaultToolkit().getScreenSize();//获取显示屏幕宽高
img=new ImageIcon("src/menu.png");//加载菜单背景
SCRH=img.getIconHeight();//以菜单背景图片宽高为游戏窗口宽高
SCRW=img.getIconWidth();
this.setBounds(screen.width/2-SCRW/2,screen.height/2-SCRH/2,SCRW,SCRH);//设置游戏窗口大小并使之居中显示
this.setTitle("连连看");//为窗口设置标题
label=new JLabel(img);//用刚才的背景图片产生标签
label.setBounds(0,0,SCRW,SCRH);//设置标签为窗口大小
this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));把游戏窗口的底层panel加上标签
this.setLayout(null);//设置游戏窗口布局为空,方便我们直接设置控件大小
panel=new JPanel();
panel.setLayout(null);//同理
panel.setBounds(0,SCRH/2,SCRW,SCRH/2);//面板大小为游戏下半部
buttonCreated("src/start.png","start",0);//创建开始游戏按钮
buttonCreated("src/more.png","more",1);//创建更多游戏按钮
panel.setOpaque(false);//设置面板背景透明使得底层便签背景显示出来
this.setContentPane(panel);设置面板为当前窗口的面板
this.setVisible(true);//设置窗口可见
}
public Lianliankan(int i)
{
COLS=6;
ROWS=5;
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
screen=Toolkit.getDefaultToolkit().getScreenSize();
img=new ImageIcon("src/youxi.png");
SCRH=img.getIconHeight();
SCRW=img.getIconWidth();
this.setBounds(screen.width/2-SCRW/2,screen.height/2-SCRH/2,SCRW,SCRH);
this.setTitle("连连看");
label=new JLabel(img);
label.setBounds(0,0,SCRW,SCRH);
this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));
this.setLayout(null);
panel=new JPanel();
panel.setLayout(null);
panel.setBounds(SCRH/2,SCRH/2,SCRW,SCRH/2);
img=new ImageIcon("src/1.png");
imgw=img.getIconWidth()+2;
imgh=img.getIconHeight()+2;
for(int cols = 1;cols < 6;cols++)
{
for(int rows = 0;rows < 5;rows++ )
{
buttonCreated2("src/"+cols+".png",cols+"",cols*imgw,rows*imgh,imgw,imgh);
}
}
panel.setOpaque(false);
this.setContentPane(panel);
this.setVisible(true);
}
public void buttonCreated(String file,String command,int y)
{
img=new ImageIcon(file);//加载图片
button=new JButton(img);//用所加载图片产生按钮对象
button.setBounds(SCRW/2-img.getIconWidth()/2,SCRH/2+y*img.getIconHeight(),img.getIconWidth(),img.getIconHeight());设置按钮大小及位置
button.setContentAreaFilled(false);//设置按钮内容区域不可见,使得按钮与我们图片大小相同
button.addActionListener(this);//为按钮监添加监听
button.setActionCommand(command);//为按钮添加命令参数
panel.add(button);//将按钮添加到面板
}
public void buttonCreated2(String file,String command,int x,int y,int w,int h)
{
img=new ImageIcon(file);同上
button=new JButton(img);
button.setBounds(x,y,imgw,imgh);
button.setContentAreaFilled(false);
button.addActionListener(this);
button.setActionCommand(command);
panel.add(button);
}
public void actionPerformed(ActionEvent e)
{
// TODO Auto-generated method stub
button=(JButton)e.getSource();
if(button.getActionCommand().equals("start"))
{
this.dispose();
//Lianliankan lianliankan=newLianliankan(1);
Game llk = new Game();
llk.randomBuild();
llk.init();
}
if(button.getActionCommand().equals("more"))
{
this.dispose();
new Lianliankan(1);
System.out.println("没有更多游戏");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Lianliankan();
}
public void windowActivated(WindowEvent arg0) {
// TODO Auto-generated method stub
}
public void windowClosed(WindowEvent arg0) {
// TODO Auto-generated method stub
}
public void windowClosing(WindowEvent arg0) {
// TODO Auto-generated method stub
}
public void windowDeactivated(WindowEvent arg0) {
// TODO Auto-generated method stub
}
public void windowDeiconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
public void windowIconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
public void windowOpened(WindowEvent arg0) {
// TODO Auto-generated method stub
}
}
上面的代码就是一个图形界面的例子,本人写程序没有写详细注释的习惯,但又考虑到既然发上来就要对大家有所帮助,所以后来又加上了注释。可以说找不到比我更啰嗦的注释了。
我有很多同学在做这个实验的时候,到网上搬运的代码图形界面往往不美观,有的甚至是数字。
但是老师要求必须是图片,所以呢他们为了加图片,改的也有些不伦不类。其实网上什么资源教程都有,只要我们有耐心去搜索,去找方法,并去实践,基本上我们的需求和目的都能达到。但是呢,毕竟呢我们是年轻人,性子急,急于就成。所以呢在这里对于我的一些同学遇到的问题进行汇总一下,希望能对遇到同样问题的同学有所帮助。
一.怎么设置背景
1.重写panel的paint方法
2.使用我上面代码一种
其实就是在panel里添加panel,底层panel添加可以设置图片的控件如JLabel,表层panel设置透明,这样表层照样可以添加控件而不会受底层影响。
特别说明的JFrame其实有多层panel,除ContentPane,更底层还有LayeredPane。所以我们可以让LayeredPane添加一个JLable来显示背景,而让ContentPane透明化,来添加按钮等控件。
this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));
panel.setOpaque(false);
二,如何让按钮大小可调节,位置可任意控制
很多同学看到连连看后,马上就会用网格布局或是网格包布局,这样按钮大小位置调节就会让他们头痛。
其实这个可以设置按钮父布局管理器为空
如
panel.setLayout(null);
private ImageIcon imgi;
private Image img;
imgi=new ImageIcon("src/logo.png");
img=imgi.getImage().getScaledInstance(40, 40, 1);//将图片生成为指定大小的副本,如40,40
imgi.setImage(img);
btn1.setIcon(imgi);
3.消去按钮内容区域,这样也可以让按钮和图片大小一致
button.setContentAreaFilled(false);//设置按钮内容区域不可见,使得按钮与我们图片大小相同
消去按钮边界
button.setBorder(null);
好了就说这么多了
希望能对你们有帮助。
我们不生产代码,我们只是代码的搬运工。
最后附上程序源码
java版连连看精美UI相关推荐
- JAVA版连连看算法研究
JAVA连连看之算法: 连连看连接方式的类型:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:off ...
- 无情剑梦断危情java_无情剑梦断危情java版下载-无情剑梦断危情最新版下载v1.1.0 安卓版 - 星光下载...
无情剑梦断危情最新版是无情剑系列的另外一精品游戏,游戏用小巧的画面和丰富的故事讲述了一个热血江湖世界,玩家控制主角经历无数次战斗,最终成长为一代大侠英雄. 无情剑梦断危情java版介绍 精美的游戏场景 ...
- java读取jpg点数_我的世界:基岩版beta1.16.0.61修复59个“特性”,同步Java版?
相信玩家们都知道Java版1.16已经更新到20w20a快照,而同版本号更新的基岩版也不甘示弱,beta1.16.0.61随之而来,可惜的是它并没有添加新事物,只是继续修复59个"特性&qu ...
- mc用什么版本的java_MC版本Java版5大功能优势
众所周知Java开发应用广泛,Java版本被很多人认为是最好的MC版本,MC版本Java版5大功能优势有什么呢?Java版开发优势:支持更多的模组.各种节日彩蛋.官方更高的重视性.游戏画面色彩更好.操 ...
- java版我的世界_我的世界Java版1.16
我的世界Java版1.16是我的世界的特殊版本,这个版本的我的世界深受玩家们的喜欢,小编为各位玩家带来了最新的我的世界Java版1.16手机版本,不仅游戏内容在一定程度上丰富十足,画面打造也非常的精美 ...
- java版mc复制tnt,教程/方块和物品复制
此页面所述的内容是通过利用漏洞实现的. 此漏洞未必对所有版本有效.该漏洞被修复后,下文所述的信息将不再适用. 请慎重对待. 本页面会教你如何在原版生存模式中复制物品和方块,而不用为它们建造一个另外的农 ...
- 悟空CRM java版(基于jfinal+vue+ElementUI的前后端分离CRM系统)
CRM9.0(JAVA版) 软件长期为企业提供企业管理软件(CRM/HRM/OA/ERP等)的研发.实施.营销.咨询.培训.服务于一体的信息化服务.悟空软件以高科技为起点,以技术为核心.以完善的售后服 ...
- java我的世界w_Minecraft我的世界Java版19w02a已发布
Minecraft我的世界Java版19w02a已发布!Minecraft1.14仍未发布,19w02a为其第14个预览版.这个快照加了许多东西,比如冒烟的篝火,有功能的制图台和讲台,非常好玩! CH ...
- ios我的世界java版_我的世界Java版
我的世界Java版是我的世界游戏的一个版本,游戏中有很多全新的玩法,玩家将创建自己的角色出生在一个像素世界中,整个游戏世界由一个个像素方块组成,玩家可以操控角色任意破坏方块,玩家将和方块像素人开展一段 ...
最新文章
- 组装自己的tesla超级计算机
- Eclipse快捷键大全,导包快捷键:ctrl+Shift+/【转】
- 西电开源社区Ubuntu 10.04软件源
- _INTSIZEOF
- cpu影响matlab仿真速度吗,Proteus仿真速度很慢的分析
- c#与获得文件夹路径,站点目录
- TStringGrid - 重绘时RECT解决一块空白区域
- VC中海量文件读写类设计与应用
- 夯实Java基础(二)——面向对象之封装
- php 数组任意位置插入值
- LINUX使用OpenSSL进行签名
- 模板 | 年度财务分析报告财务工作汇报PPT
- 5G NR的新特征—超低时延
- 【双碳政策】分布式光伏如何进行实时运维监测管理
- 考研英语单词-近义词分类-Fourth Day
- 深扒“亚稳态”的底裤,从MOS管到CMOS门电路,再到亚稳态分析
- selenium如何接管(控制)已打开Chrome浏览器
- taro 项目中接入EChart图表库
- 计算思维与大学计算机基础
- word2vec的cbow