Java基础

GUI编程

核心技术:Swing、AWT

现在GUI并不流行 因为其界面不美观、需要依赖jre环境

Swing

public class Demo1 {

    //init();初始化
public void init() {
//最大窗口
JFrame jf = new JFrame("jframe窗口");
jf.setVisible(true);
jf.setSize(500,600); //设置文字jlable
JLabel jLabel = new JLabel("欢迎来到java世界");
jf.add(jLabel);
jLabel.setHorizontalAlignment(SwingConstants.CENTER);
//获取一个容器
Container contentPane = jf.getContentPane();
contentPane.setBackground(Color.cyan); jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
} public static void main(String[] args) {
new Demo1().init();
}
}

弹窗

public class Demo2 {

    public void init(){
JFrame jf = new JFrame();
jf.setVisible(true);
jf.setSize(600,800);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); Container cp = jf.getContentPane(); cp.setLayout(null);//绝对布局 JButton jBut = new JButton("点我");
jBut.setBounds(20,20,200,100);
jBut.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new MyDialog();
}
}); cp.add(jBut);//将按钮放进容器中 } public static void main(String[] args) {
new Demo2().init();
}
} //弹窗窗口
class MyDialog extends JDialog{
public MyDialog() {
setVisible(true);
setBounds(100,100,200,200); Container contentPane = getContentPane();
contentPane.setLayout(null);
JLabel label = new JLabel("我来带你飞");
label.setBounds(50,50,100,100);
contentPane.add(label);
}
}

Icon 图标

public class Demo3 extends JFrame implements Icon {
private int width;
private int height; public Demo3() {
} public Demo3(int width, int height) {
this.width = width;
this.height = height;
} public void init() {
Demo3 d = new Demo3(15,15);
JLabel icon = new JLabel("icon", d, SwingConstants.CENTER);
Container contentPane = getContentPane();
contentPane.add(icon);
setVisible(true);
setSize(200,200);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
} public void setIcon() {
JLabel icon2 = new JLabel("image",SwingConstants.CENTER);
URL url = this.getClass().getResource("ico.png");
ImageIcon imageIcon = new ImageIcon(url);
icon2.setIcon(imageIcon);
Container contentPane = getContentPane();
contentPane.add(icon2);
setVisible(true);
setSize(200,200);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
} public static void main(String[] args) {
// new Demo3().init();
new Demo3().setIcon();
} @Override
public void paintIcon(Component c, Graphics g, int x, int y) {
g.fillOval(x,y,width,height);
} @Override
public int getIconWidth() {
return width;
} @Override
public int getIconHeight() {
return height;
}
}

面板

public class Demo4 extends JFrame {
public Demo4() {
Container contentPane = getContentPane();
contentPane.setLayout(new GridLayout(2,1,10,10)); JPanel panel = new JPanel();
panel.setLayout(new GridLayout(1,3));
contentPane.add(panel); panel.add(new JButton("1"));
panel.add(new JButton("2"));
panel.add(new JButton("3")); contentPane.add(panel); setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(300,400);
} public static void main(String[] args) {
new Demo4();
} }
public class Demo5 extends JFrame {
public Demo5(){
Container contentPane = getContentPane(); JTextArea jTextArea = new JTextArea(20, 50);
Scanner scanner = new Scanner(System.in);
String str= scanner.toString();
jTextArea.setText(str); JScrollPane jScrollPane = new JScrollPane(jTextArea);
contentPane.add(jScrollPane); setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(500,400); } public static void main(String[] args) {
new Demo5();
} }

单选、多选

public class Demo6 extends JFrame {
public Demo6(){
// Container container = getContentPane();
//
// URL url = Demo6.class.getResource("ico.png");
// ImageIcon icon = new ImageIcon(url);
//
// JButton jButton = new JButton();
// jButton.setSize(55,55);
// jButton.setIcon(icon);
// jButton.setToolTipText("我是提示");
//
// container.add(jButton);
//
// setVisible(true);
// setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// setSize(400,500);
} public void init(){
Container container = getContentPane(); URL url = Demo6.class.getResource("ico.png");
ImageIcon icon = new ImageIcon(url); //单选框
JRadioButton jRadioButton1 = new JRadioButton("jRadioButton1");
JRadioButton jRadioButton2 = new JRadioButton("jRadioButton2");
JRadioButton jRadioButton3 = new JRadioButton("jRadioButton3"); //分组 将按钮放入组内 一个组只能选择一个
ButtonGroup group = new ButtonGroup();
group.add(jRadioButton1);
group.add(jRadioButton2);
group.add(jRadioButton3); container.add(jRadioButton1,BorderLayout.SOUTH);
container.add(jRadioButton2,BorderLayout.CENTER);
container.add(jRadioButton3,BorderLayout.NORTH); setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(400,500);
} public void init2(){
Container container = getContentPane(); URL url = Demo6.class.getResource("ico.png");
ImageIcon icon = new ImageIcon(url); //多选
JCheckBox checkBox1 = new JCheckBox("checkBox1");
JCheckBox checkBox2 = new JCheckBox("checkBox1");
JCheckBox checkBox3 = new JCheckBox("checkBox1"); container.add(checkBox1,BorderLayout.NORTH);
container.add(checkBox2,BorderLayout.CENTER);
container.add(checkBox3,BorderLayout.SOUTH); setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(400,500);
} public static void main(String[] args) {
new Demo6().init2();
}
}

下拉、列表

public class Demo7 extends JFrame {
public Demo7() { } public void init() {
Container container = getContentPane(); //下拉框
JComboBox<Object> box = new JComboBox<>();
box.addItem("黑");
box.addItem("白");
box.addItem("黄");
box.addItem("红"); container.add(box); setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(400,500);
} public void init2() {
Container container = getContentPane();
String[] strings = {"1","2","3","4"}; //固定添加 //列表框
Vector objs = new Vector();
objs.add(1);
objs.add("2");
objs.add("DNF");
objs.add(234); JList jList = new JList(objs); container.add(jList); setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(400,500);
} public static void main(String[] args) {
new Demo7().init2();
}
}

文本框

public class Demo8 extends JFrame {
public void init1(){
Container container = getContentPane(); //文本框
JTextField textField1 = new JTextField("nihao");
TextField tf = new TextField();
JTextField textField2 = new JTextField("java");
tf.setEchoChar('*');//伪密码框效果 JPasswordField passwordField = new JPasswordField();
passwordField.setEchoChar('*');//密码显示样式更改 container.add(textField1,BorderLayout.SOUTH);
container.add(textField2,BorderLayout.NORTH);
container.add(passwordField,BorderLayout.CENTER);
container.add(tf,BorderLayout.WEST); setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(400,500);
} public static void main(String[] args) {
new Demo8().init1();
}
}

贪吃蛇小游戏

/**
* 游戏面板
*/
public class GamePanel extends JPanel implements KeyListener, ActionListener { //定义的数据结构
int length;
int[] snakeX = new int[600];//x坐标
int[] snakeY = new int[500];//y坐标
String drec;//初始方向 //食物的坐标
int foodX;
int foodY;
Random random = new Random();
int score;//成绩 boolean isStart = false;//游戏开始状态
boolean isFail = false;//游戏失败状态 Timer timer = new Timer(100,this);//100毫秒执行一次 public GamePanel(){
init();
setFocusable(true);//获取焦点和键盘事件
addKeyListener(this);
timer.start();
} //初始化
public void init(){
//蛇的初始长度
length = 3;
//头的位置
snakeX[0] = 100;
snakeY[0] = 100;
//身体的位置
snakeX[1] = 75;
snakeY[1] = 100;
//尾巴的位置
snakeX[2] = 50;
snakeY[2] = 100;
drec = "right";
score=0; //食物初始随机位置
foodX = 25+25*random.nextInt(34);
foodY = 75+25*random.nextInt(24); } //绘制游戏面板
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);//清屏幕
this.setBackground(Color.BLACK);
Date.header.paintIcon(this,g,25,11);//头部广告栏
g.fillRect(25,75,850,600);//默认游戏界面 //画小蛇
if (drec.equals("right")) {
Date.right.paintIcon(this,g,snakeX[0],snakeY[0]);
} else if (drec.equals("left")){
Date.left.paintIcon(this,g,snakeX[0],snakeY[0]);
} else if (drec.equals("up")) {
Date.up.paintIcon(this,g,snakeX[0],snakeY[0]);
} else if (drec.equals("down")) {
Date.down.paintIcon(this,g,snakeX[0],snakeY[0]);
} //游戏开始状态
if (isStart==false) {
g.setColor(Color.white);
g.setFont(new Font("微软雅黑",Font.BOLD,40));//设置字体
g.drawString("按下空格开始游戏",300,300);//添加文字
} //游戏失败状态
if (isFail==true){
g.setColor(Color.RED);
g.setFont(new Font("微软雅黑",Font.BOLD,40));//设置字体
g.drawString("游戏失败,按下空格重新开始",300,300);//添加文字
} //画上身体
for (int i = 1;i<length;i++) {
Date.body.paintIcon(this,g,snakeX[i],snakeY[i]);//身体
} //画上食物
Date.food.paintIcon(this,g,foodX,foodY);
//画上积分
g.setColor(Color.white);
g.setFont(new Font("微软雅黑",Font.BOLD,20));//设置字体
g.drawString("分数 "+score,750,30);//添加文字
g.drawString("长度 "+length,750,50);//添加文字 } @Override
public void keyTyped(KeyEvent e) { } //键盘监听事件
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode == KeyEvent.VK_SPACE){
if (isFail){
isFail = false;
init();
} else {
isStart = !isStart;//取反
}
repaint();
} if (keyCode == KeyEvent.VK_UP){
drec = "up"; } else if (keyCode == KeyEvent.VK_DOWN) {
drec = "down"; } else if (keyCode == KeyEvent.VK_LEFT) {
drec = "left"; } else if (keyCode == KeyEvent.VK_RIGHT) {
drec = "right"; }
} @Override
public void keyReleased(KeyEvent e) { } //事件监听--通过固定事件来刷新
@Override
public void actionPerformed(ActionEvent e) {
if (isStart && isFail == false){
//移动
for (int i = length-1;i>0;i--){
snakeX[i] = snakeX[i-1]; //向前移动一节
snakeY[i] = snakeY[i-1];
}
if (drec.equals("right")){
snakeX[0] = snakeX[0]+25;
if (snakeX[0]>850){ //撞到边界就回来
snakeX[0]=25;
} } else if (drec.equals("left")) {
snakeX[0] = snakeX[0]-25;
if (snakeX[0]<25){ //撞到边界就回来
snakeX[0]=850;
} } else if (drec.equals("up")) {
snakeY[0] -=25;
if (snakeY[0]<75){ //撞到边界就回来
snakeY[0]=650;
}
} else if (drec.equals("down")) {
snakeY[0] += 25;
if (snakeY[0]>650){ //撞到边界就回来
snakeY[0]=75;
}
}
//失败判定
for (int i = 1;i<length;i++){
if (snakeX[0]==snakeX[i]&&snakeY[0]==snakeY[i]){
isFail = true;
}
} //吃食物
if (snakeX[0]==foodX && snakeY[0]==foodY){
length++;//长度+1
score++; //分数+1
//再次随机生成食物
foodX = 25+25*random.nextInt(34);
foodY = 75+25*random.nextInt(24);
} repaint();//重画 } timer.start();
}
} /**
* 数据层
*/
public class Data {
public static URL headerUrl = Data.class.getResource("images/header.png");
public static ImageIcon header = new ImageIcon(headerUrl); public static URL upUrl = Data.class.getResource("images/up.png");
public static ImageIcon up = new ImageIcon(upUrl); public static URL downUrl = Data.class.getResource("images/down.png");
public static ImageIcon down = new ImageIcon(downUrl); public static URL leftUrl = Data.class.getResource("images/left.png");
public static ImageIcon left = new ImageIcon(leftUrl); public static URL rightUrl = Data.class.getResource("images/right.png");
public static ImageIcon right = new ImageIcon(rightUrl); public static URL bodyUrl = Data.class.getResource("images/body.png");
public static ImageIcon body = new ImageIcon(bodyUrl); public static URL foodUrl = Data.class.getResource("images/food.png");
public static ImageIcon food = new ImageIcon(foodUrl); } //main方法
public class StartGame {
public static void main(String[] args) {
JFrame jFrame = new JFrame(); jFrame.add(new GamePanel(),BorderLayout.CENTER); jFrame.setBounds(10,10,900,720);
jFrame.setResizable(false);//窗口大小不可变
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}

图片素材链接:https://pan.baidu.com/s/1b8vL6AJqlmROFe_kB7oohw

提取码:f7yt

java_day23~24的更多相关文章

  1. Fedora 24中的日志管理

    Introduction Log files are files that contain messages about the system, including the kernel, servi ...

  2. CSharpGL(24)用ComputeShader实现一个简单的图像边缘检测功能

    CSharpGL(24)用ComputeShader实现一个简单的图像边缘检测功能 效果图 这是红宝书里的例子,在这个例子中,下述功能全部登场,因此这个例子可作为使用Compute Shader的典型 ...

  3. 【趣味分享】C#实现回味童年的24点算法游戏

    一.24点游戏玩法规则效果展示 1.初始化界面 2.开始游戏界面 3.游戏超时界面 4.查看答案界面 5.答对界面 6.答错界面 7.计算表达式的验证界面 8.一副牌算完开始新一副牌界面 到这里24点 ...

  4. C#开发微信门户及应用(24)-微信小店货架信息管理

    在前面微信小店系列篇<C#开发微信门户及应用(22)-微信小店的开发和使用>里面介绍了一些微信小店的基础知识,以及<C#开发微信门户及应用(23)-微信小店商品管理接口的封装和测试& ...

  5. [MySQL Reference Manual] 24 MySQL sys框架

    24 MySQL sys框架 24 MySQL sys框架 24.1 sys框架的前提条件 24.2 使用sys框架 24.3 sys框架进度报告 24.4 sys框架的对象 24.4.1所有sys下 ...

  6. mysql 5.6.24安装实例

    安装前准备工作: 1)编辑PATH路径 vim /etc/profile PATH=/home/mysql/bin:/home/mysql/lib:$PATH export PATH 2)生效PATH ...

  7. C语言-纸牌计算24点小游戏

    C语言实现纸牌计算24点小游戏 利用系统时间设定随机种子生成4个随机数,并对4个数字之间的运算次序以及运算符号进行枚举,从而计算判断是否能得出24,以达到程序目的.程序主要功能已完成,目前还有部分细节 ...

  8. .NET开发人员必看:提高ASP.NET Web应用性能的24种方法和技巧

    那性能问题到底该如何解决?以下是应用系统发布前,作为 .NET 开发人员需要检查的点. 1.debug=「false」 当创建 ASP.NET Web应用程序,默认设置为「true」.开发过程中,设置 ...

  9. [.net 面向对象程序设计进阶] (24) 团队开发利器(三)使用SVN多分支并行开发(下)

    [.net 面向对象程序设计进阶] (24) 团队开发利器(三)使用SVN多分支并行开发(下) 本篇导读: 接上篇继续介绍SVN的高级功能,即使用分支并行开发.随着需求的不断变更,新功能的增加.特别是 ...

  10. 1Z0-053 争议题目解析24

    1Z0-053 争议题目解析24 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 24.Which of the following information will be gath ...

随机推荐

  1. 93、springboot 和springcloud版本对比

    https://start.spring.io/actuator/info 建议转为json

  2. kibana7.6.2内网windows系统下编译打包部署

    1.在kibana根目录下执行命令: yarn build  --skip-os-packages 2.报错无法下载node:将node相关文件下载放到kibana/.node_binaries/10 ...

  3. ABAP 动态内表 实例展示以及代码Demo

    因根据查询条件展示的报表列数不一定一致,因此采用动态内表的方式进行处理 这里写了一个简单的Demo记录一下 效果如下图: 一般来说通过选择屏幕来控制列的,我这里就简单处理,直接对内表赋予相关值,包括相 ...

  4. nginx代理出现上传文件过大解决办法

    1.错误描述 2.错误原因 1.上传文件时,利用localhost访问系统,不会出现这个问题:用域名访问这个系统时,出现这个问题,提示是:请求实体太大 由于Nginx反向代理服务器client_max ...

  5. Unity鼠标点选RenderTexture里渲染的3D模型

    公司的产品有个功能:在主相机之外,另有一个摄像机来渲染不同的3D模型,然后把摄像机的RenderTexture赋值给一个 rawImage.texture,作为2D的UGUI来显示.(应用场景:模型结 ...

  6. applicationContext.xml及springMVC.xml详解

    在前面的web.xml详解里,我们引入applicationContext.xml和springMVC.xml两个配置文件, 前者是spring 全局配置文件,用来控制spring 特性的, 后者则是 ...

  7. Vue+Element+Table表格动态跨列文章

    https://my.oschina.net/u/4772459/blog/4699602 如图所示: 1 <template class="SysRole"> 2 & ...

  8. 【闫式dp分析法】

  9. MySQL错误合集

    Error Code: 1052. Column 'Sno' in field list is ambiguous ambiguous意味含糊不清,常见于多个表中有相同名字的属性,在查询时需要分别说明 ...

  10. VMWare安装CentOS 7系统 & 操作系统优化

    1.准备工作 (1)VMWare 14:https://download3.vmware.com/software/wkst/file/VMware-workstation-full-14.1.1-7 ...