只放一个图片做网站,网站建设的特色,不花钱怎么做网站运营,如何做网站授权【JAVA入门】Day17 - GUI 文章目录 【JAVA入门】Day17 - GUI一、组件二、事件 GUI 即图形化界面。
一、组件 一个 Java 的图形化界面项目主要用到了下面几种组件。
Java 中最外层的窗体叫做 JFrame。Java 中最上层的菜单叫做 JMenuBar。Java 中管理文字和图片的容器叫做 JLab…【JAVA入门】Day17 - GUI 文章目录 【JAVA入门】Day17 - GUI一、组件二、事件 GUI 即图形化界面。
一、组件 一个 Java 的图形化界面项目主要用到了下面几种组件。
Java 中最外层的窗体叫做 JFrame。Java 中最上层的菜单叫做 JMenuBar。Java 中管理文字和图片的容器叫做 JLabel。
【练习1】创建主界面1。
public class App {public static void main(String[] args) {//表示程序的启动入口//想要启动哪个界面就创建它的对象new LoginJFrame(); //调用默认空参构造方法}
}public class GameJFrame extends JFrame {//1.创建一个游戏的主界面//属性宽 高 行为 setSize setVisible//规定GameJFrame 这个界面表示的是游戏的主界面public GameJFrame() {this.setSize(603, 680);this.setVisible(true);}
}public class RegisterJFrame extends JFrame {//注册界面public RegisterJFrame() {this.setSize(488, 430);this.setVisible(true);}
}public class LoginJFrame extends JFrame {//登录界面public LoginJFrame() {this.setSize(488, 430);this.setVisible(true);}
}【练习2】设置 GameJFrame的相关方法。 public GameJFrame() {//设置界面的宽高this.setSize(603, 680);//设置界面的标题this.setTitle(拼图单机版 v1.0);//设置界面置顶this.setAlwaysOnTop(true);//设置界面居中this.setLocationRelativeTo(null);//设置游戏的关闭模式this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//让窗体显示出来建议写在最后this.setVisible(true);}【练习3】在 GameJFrame 窗体上方添加菜单。 public GameJFrame() {//设置界面的宽高this.setSize(603, 680);//设置界面的标题this.setTitle(拼图单机版 v1.0);//设置界面置顶this.setAlwaysOnTop(true);//设置界面居中this.setLocationRelativeTo(null);//设置游戏的关闭模式this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//初始化菜单//创建整个的菜单对象JMenuBar jMenuBar new JMenuBar();//创建菜单上的两个选项的对象功能 关于我们JMenu functionJMenu new JMenu(功能);JMenu aboutJMenu new JMenu(关于我们);//创建选项下面的条目对象JMenuItem replayItem new JMenuItem(重新游戏);JMenuItem reloginItem new JMenuItem(重新登录);JMenuItem closeItem new JMenuItem(关闭游戏);JMenuItem accountItem new JMenuItem(公众号);//将每一个选项下的条目添加到选项当中functionJMenu.add(replayItem);functionJMenu.add(reloginItem);functionJMenu.add(closeItem);aboutJMenu.add(accountItem);//将菜单里的两个选项添加到菜单当中jMenuBar.add(functionJMenu);jMenuBar.add(aboutJMenu);//给整个界面设置菜单this.setJMenuBar(jMenuBar);//让窗体显示出来建议写在最后this.setVisible(true);}将构造方法中的代码进行抽取抽取到不同的方法中。 public GameJFrame() {//初始化界面initJFrame();//初始化菜单initJMenuBar();//让窗体显示出来建议写在最后this.setVisible(true);}private void initJMenuBar() {//初始化菜单//创建整个的菜单对象JMenuBar jMenuBar new JMenuBar();//创建菜单上的两个选项的对象功能 关于我们JMenu functionJMenu new JMenu(功能);JMenu aboutJMenu new JMenu(关于我们);//创建选项下面的条目对象JMenuItem replayItem new JMenuItem(重新游戏);JMenuItem reloginItem new JMenuItem(重新登录);JMenuItem closeItem new JMenuItem(关闭游戏);JMenuItem accountItem new JMenuItem(公众号);//将每一个选项下的条目添加到选项当中functionJMenu.add(replayItem);functionJMenu.add(reloginItem);functionJMenu.add(closeItem);aboutJMenu.add(accountItem);//将菜单里的两个选项添加到菜单当中jMenuBar.add(functionJMenu);jMenuBar.add(aboutJMenu);//给整个界面设置菜单this.setJMenuBar(jMenuBar);}private void initJFrame() {//设置界面的宽高this.setSize(603, 680);//设置界面的标题this.setTitle(拼图单机版 v1.0);//设置界面置顶this.setAlwaysOnTop(true);//设置界面居中this.setLocationRelativeTo(null);//设置游戏的关闭模式this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}【练习4】添加图片。 private void initImage() {//创建一个图片ImageIcon的对象ImageIcon icon new ImageIcon(D:\\IdeaProjects\\PuzzleGame\\image\\daxiaoqiao\\1.jpg);//创建一个JLabel的对象管理容器JLabel jLabel new JLabel(icon);//把管理容器添加到界面中this.add(jLabel);}注意窗体和图片之间其实还有一个隐藏的容器布局方式容器这个容器可以用 getContentPane() 来获取我们添加的图片实质上是添加进了这个容器当中如果没有设定这个容器的特殊要求它会默认把图片放到居中位置。如果不想将图片放到正中央就需要把这个默认机制取消掉我们可以使用 setLayout(null) 来实现。 //在JFrame的初始化方法中//取消掉默认居中布局this.setLayout(null);private void initImage() {//创建一个图片ImageIcon的对象ImageIcon icon new ImageIcon(D:\\IdeaProjects\\PuzzleGame\\image\\daxiaoqiao\\1.jpg);//创建一个JLabel的对象管理容器JLabel jLabel new JLabel(icon);//指定图片位置jLabel.setBounds(0, 0, 105, 105);//把管理容器添加到布局容器中this.getContentPane().add(jLabel);}【练习5】打乱一维数组中的数据。 需求把一个一维数组中的数据0~15打乱顺序然后再以4个一组的方式添加到二维数组中。
package test;import java.util.Random;public class RandomTest {public static void main(String[] args) {int[] tempArr {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};Random r new Random();for(int i 0; i tempArr.length; i) {//获取随机索引int index r.nextInt(tempArr.length);int temp 0;//交换两个索引上的数据temp tempArr[i];tempArr[i] tempArr[index];tempArr[index] temp;//遍历数组System.out.print(tempArr[i] );}System.out.println();//创建一个二维数组int[][] data new int[4][4];//给二维数组添加数据//遍历tempArr每一个元素把每一个元素依次添加到二维数组中for (int i 0; i tempArr.length; i) {data[i / 4][i % 4] tempArr[i];}//遍历二维数组for(int i 0 ;i 4; i) {for(int j 0; j 4; j) {System.out.print(data[i][j] );}System.out.println();}}
}【练习6】打乱图片。 private void initData() {int[] tempArr {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};Random r new Random();for(int i 0; i tempArr.length; i) {//获取随机索引int index r.nextInt(tempArr.length);//交换两个索引上的数据int temp tempArr[i];tempArr[i] tempArr[index];tempArr[index] temp;}//给二维数组添加数据//遍历tempArr每一个元素把每一个元素依次添加到二维数组中for (int i 0; i tempArr.length; i) {data[i / 4][i % 4] tempArr[i]; //巧妙运用数学知识一行完成二维数组元素的添加}}private void initImage() {for(int i 0 ; i 4; i){for (int j 0; j 4; j) {//创建一个图片ImageIcon的对象ImageIcon icon new ImageIcon(D:\\IdeaProjects\\PuzzleGame\\image\\daxiaoqiao\\ data[i][j] .jpg);//创建一个JLabel的对象管理容器JLabel jLabel new JLabel(icon);//指定图片位置jLabel.setBounds(105 * j, 105 * i 4, 105, 105);//把管理容器添加到界面中this.getContentPane().add(jLabel);}}二、事件 事件就是可以被组件识别的操作。当你对组件做了某种事情后就会执行相应的代码。 GUI 中的事件源可以是按钮、图片、窗体等等控件。 鼠标点击、鼠标划入等等操作都统称为事件。 当事件源上发生了某个事件则执行某段代码这个行为叫做绑定监听。
KeyListner 键盘监听MouseListener 鼠标监听ActionListener 动作监听
【练习7】写一个按钮的事件监听。 按钮用 JButton 类创建。事件监听需要导包导入 ActionEvent 和 ActionListener。
package test;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class EventTest {public static void main(String[] args) {JFrame jFrame new JFrame();//设置界面宽高jFrame.setSize(603, 680);//设置界面标题jFrame.setTitle(事件演示);//设置界面置顶jFrame.setAlwaysOnTop(true);//设置界面居中jFrame.setLocationRelativeTo(null);//设置关闭模式jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//取消组件默认居中放置jFrame.setLayout(null);//创建一个按钮对象JButton jbt new JButton(点我);//设置按钮位置和宽高jbt.setBounds(0,0,100,50);//给按钮添加动作监听//jbt:组件对象表示要给哪个组件添加事件//addActionListener:表示我要给组件添加哪个事件监听动作监听包括两种鼠标左键点击空格按下//()中应该传入一个接口的实现类对象该对象是ActionListener的对象可以用匿名内部类作为参数//该参数表示事件被触发后要执行的代码jbt.addActionListener(new ActionListener() {Overridepublic void actionPerformed(ActionEvent e) {System.out.println(按钮被点击了);}});//把按钮添加入窗体jFrame.getContentPane().add(jbt);//显示窗体jFrame.setVisible(true);}
}事件监听还有另一种写法可以让当前界面去实现 ActionListener 接口。 写一个窗体实现 ActionListener 接口。
package test;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;public class MyJFrame extends JFrame implements ActionListener {//创建2个按钮必须在成员位置JButton jbt1 new JButton(点我);JButton jbt2 new JButton(点我。);//构造方法MyJFrame() {this.setSize(600,600);//设置界面的标题this.setTitle(登录);//设置界面置顶this.setAlwaysOnTop(true);//设置界面居中this.setLocationRelativeTo(null);//设置窗口的关闭模式this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗口的Layoutthis.setLayout(null);//设置按钮位置大小jbt1.setBounds(0,0,100,50);jbt2.setBounds(202,0,100,50);//给按钮添加事件//因为当前类实现了ActionListener接口所以该类本身对象即可作为参数反传递给addActionListener()方法jbt1.addActionListener(this);jbt2.addActionListener(this);//把按钮添加到窗口中this.getContentPane().add(jbt1);this.getContentPane().add(jbt2);//显示窗体this.setVisible(true);}//实现ActionListener接口重写actionPerformed方法Overridepublic void actionPerformed(ActionEvent e) {//对当前的按钮进行判断//获取当前被操作的那个按钮对象Object source e.getSource();if(source jbt1) {jbt1.setSize(200,200);System.out.println(按钮1被按下);}else{Random r new Random();jbt2.setLocation(r.nextInt(500),r.nextInt(500));System.out.println(按钮2被按下);}}
}测试类用来创建窗口。
package test;public class EventTest2 {public static void main(String[] args) {MyJFrame myJFrame new MyJFrame();}
}