【Java项目】GUI图形用户界面(不断更新中!)
<目录>
(2) FlowLayout(顺序布局器:容器上的组件水平摆放)
(3) BorderLayout(边框布局器:容器上的组件按上北、下南、左西、右东、中的顺序摆放)
(4) GridLayout(网格布局器:容器上的组件按网格区域摆放)
(5) setPreferredSize(使用布局器的时候,改变组件显示大小,仅部分有效)
<正文内容>
<创建一个简单的窗体>
package practice;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Test {
public static void main(String[] args) {
JFrame f=new JFrame("Kannyi的窗体"); //主窗体,括号里面是标题
f.setSize(400,300); //主窗体设置大小,宽400高300
f.setLocation(200, 200); //主窗体设置位置,距离(屏幕左侧200,屏幕上方200)
f.setLayout(null); //主窗体中的组件设置为绝对定位
JButton b=new JButton("Kannyi的按钮");//按钮组件,还没设置功能
b.setBounds(50,50,280,30); //同时设置组件的位置和大小
f.add(b); //把按钮加入到主窗体中
//关闭窗体时,退出程序,不关会越来越卡
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//让窗体可见
f.setVisible(true);
}
}
界面如下:

<如何进行事件监听>
(1)按钮监听
package practice;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Test {
public static void main(String[] args) {
JFrame f=new JFrame("Kannyi的窗体"); //主窗体,括号里面是标题
f.setSize(400,300); //主窗体设置大小,宽400高300
f.setLocation(580,200); //主窗体设置位置,距离(屏幕左侧200,屏幕上方200)
f.setLayout(null); //主窗体中的组件设置为绝对定位
//标签,用于显示信息,比如文本或图像
JLabel l1=new JLabel();
//获取图像
ImageIcon i=new ImageIcon("C:/Users/ASUS/Pictures/其他/img.png");
//设置指定的图像到标签中
l1.setIcon(i);
//设置标签的位置和大小
l1.setBounds(50,50,i.getIconWidth(),i.getIconHeight());
JLabel l2=new JLabel();
l2.setText("Kannyi的文本"); //设置指定的文本到标签中
l2.setBounds(30, 30, 80, 12); //设置标签的位置和大小,高度太高排版会出问题,12正好
JButton b=new JButton("隐藏图片"); //按钮组件
b.setBounds(250,200,100,30);
//给按钮增加监听
//写法1
/*----------------------------------------------
b.addActionListener(new ActionListener(){
//当按钮被点击时,actionPerformed方法就会被执行
//就会触发ActionEvent事件
public void actionPerformed(ActionEvent e) {
l.setVisible(false);
}
});
-----------------------------------------------*/
//写法2
b.addActionListener(e->l1.setVisible(false));
f.add(b);
f.add(l1);
f.add(l2);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
界面如下:

(2)键盘监听
package practice;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Test {
public static void main(String[] args) {
JFrame f = new JFrame("Kannyi的窗体");
f.setSize(400, 300);
f.setLocation(580, 200);
f.setLayout(null);
JLabel l = new JLabel();
ImageIcon i = new ImageIcon("C:/Users/ASUS/Pictures/其他/img.png");
l.setIcon(i);
l.setBounds(50, 50, i.getIconWidth(), i.getIconHeight());
//增加键盘监听
f.addKeyListener(new KeyListener() {
//键被弹起
public void keyReleased(KeyEvent e) {
//左键37 上键38 右键39 下键40
/*
可用下面这个函数知道键位的Code
System.out.println(e.getKeyCode());
*/
if (e.getKeyCode() == 37) {
//图片向左移动 (x坐标减少,y坐标不变)
l.setLocation(l.getX() -10, l.getY());
}
if (e.getKeyCode() == 38) {
//图片向上移动 (x坐标不变,y坐标减少)
l.setLocation(l.getX(), l.getY() - 10);
}
if (e.getKeyCode() == 39) {
//图片向右移动 (x坐标增加,y坐标不变)
l.setLocation(l.getX() + 10, l.getY());
}
if (e.getKeyCode() == 40) {
//图片向下移动 (x坐标不变,y坐标增加)
l.setLocation(l.getX(), l.getY() + 10);
}
}
//键被按下,可以实现连续运动
//之前被定义过的键位就不能用了
public void keyPressed(KeyEvent e) {
}
// 一个按下弹起的组合动作
//不会用!!!
public void keyTyped(KeyEvent e) {
}
});
f.add(l);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
界面如下(看不出什么特别,因为要用键盘实现上下左右操作):

(3)鼠标监听
package practice;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Test {
public static void main(String[] args) {
JFrame f = new JFrame("Kannyi的窗体");
f.setLayout(null);
f.setSize(500, 400);
f.setLocationRelativeTo(null); //设置窗体在屏幕正中央
JLabel l = new JLabel();
ImageIcon i = new ImageIcon("C:/Users/ASUS/Pictures/其他/img.png");
l.setIcon(i);
l.setBounds(150, 100, i.getIconWidth(), i.getIconHeight());
/*
//鼠标监听-方法1
//这种方法的缺点在于每个方法都要写出来,很麻烦
l.addMouseListener(new MouseListener() {
//释放鼠标
public void mouseReleased(MouseEvent e) {
}
//按下鼠标
public void mousePressed(MouseEvent e) {
}
//鼠标退出
public void mouseExited(MouseEvent e) {
}
//鼠标进入
public void mouseEntered(MouseEvent e) {
//Random r.nextInt(int n)可以随机生成一个[0,n)的区间
Random r = new Random();
//下面的相减操作是防止图片随机到窗体外
int x = r.nextInt(f.getWidth() - l.getWidth());
int y = r.nextInt(f.getHeight() - l.getHeight());
l.setLocation(x, y);
}
//按下释放组合动作为点击鼠标
public void mouseClicked(MouseEvent e) {
}
});
*/
//鼠标监听-方法2
//用适配器,只需要重写用到的方法即可,较为方便
l.addMouseListener(new MouseAdapter() {
//只有mouseEnter用到了
public void mouseEntered(MouseEvent e) {
Random r=new Random();
int x=r.nextInt(f.getWidth()-l.getWidth());
int y=r.nextInt(f.getHeight()-l.getHeight());
l.setLocation(x, y);
}
});
f.add(l);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
界面如下(看不出什么特别,因为要用鼠标实现操作):

<容器>
(1)创建一个简单的对话框
package practice;
import javax.swing.JButton;
import javax.swing.JDialog;
public class Test {
public static void main(String[] args) {
JDialog d=new JDialog(); //对话框
d.setTitle("Kannyi的对话框"); //设置对话框的标题
d.setSize(400,300);
d.setLocation(200,200);
d.setLayout(null);
JButton b=new JButton("kannyi的按钮");
b.setBounds(50,50,280,30);
d.add(b);
d.setVisible(true);
}
}
界面如下:

(2)创建一个简单的模态对话框(父窗体不能被激活,除非对话框关闭)
package practice;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
public class Test {
public static void main(String[] args) {
JFrame f=new JFrame("Kannyi的外部窗体");
f.setSize(600, 500);
f.setLocation(100, 100);
JDialog d=new JDialog(f); //根据外部窗体实例化JDialog
d.setModal(true); //设置为模态,其后的父窗体不能被激活,除非对话框关闭
d.setTitle("Kannyi的模态对话框");
d.setSize(400,300);
d.setLocation(200,200);
d.setLayout(null);
JButton b=new JButton("Kannyi的按钮");
b.setBounds(50,50,280,30);
d.add(b);
f.setVisible(true);
d.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
界面如下:

(3)使窗体大小不可变化
package practice;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Test {
public static void main(String[] args) {
JFrame f=new JFrame("Kannyi的窗口");
f.setSize(400,300);
f.setLocation(200, 200);
f.setLayout(null);
JButton b=new JButton("Kannyi的按钮");
b.setBounds(50, 50, 280, 30);
f.add(b);
//窗体大小不可变化
f.setResizable(false);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
界面如下:

<布局器>
(1)绝对定位
package practice;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Test {
public static void main(String[] args) {
JFrame f=new JFrame("Kannyi的窗体");
f.setSize(400,300);
f.setLocation(200,200);
//绝对定位:设置布局器为null,容器上的组件都需要指定位置和大小
f.setLayout(null);
JButton b1=new JButton("按钮1");
b1.setBounds(50,50,70,30);
JButton b2=new JButton("按钮2");
b2.setBounds(150,50,80,30);
//没有指定位置和大小,不会出现在容器上
JButton b3=new JButton("按钮3");
f.add(b1);
f.add(b2);
f.add(b3);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
界面如下:

(2)FlowLayout
package practice;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Test {
public static void main(String[] args) {
JFrame f=new JFrame("Kannyi的窗体");
f.setSize(400,300);
f.setLocation(200, 200);
//设置布局器为FlowLayrout
//容器上的组件水平摆放
f.setLayout(new FlowLayout());
JButton b1=new JButton("按钮1");
JButton b2=new JButton("按钮2");
JButton b3=new JButton("按钮3");
//加入到容器,无需单独指定大小和位置
f.add(b1);
f.add(b2);
f.add(b3);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
界面如下:

(3)BorderLayout
package practice;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Test {
public static void main(String[] args) {
JFrame f=new JFrame("Kannyi的窗体");
f.setSize(400,300);
f.setLocation(200,200);
//设置布局为BorderLayout
//容器上的组件按照 上北 下南 左西 右东 的顺序摆放(可以自己设置)
f.setLayout(new BorderLayout());
JButton b1 = new JButton("按钮1");
JButton b2 = new JButton("按钮2");
JButton b3 = new JButton("按钮3");
JButton b4 = new JButton("按钮4");
JButton b5 = new JButton("按钮5");
//加入到容器的时候,需要指定位置
f.add(b1, BorderLayout.NORTH);
f.add(b2, BorderLayout.SOUTH);
f.add(b3, BorderLayout.WEST);
f.add(b4, BorderLayout.EAST);
f.add(b5, BorderLayout.CENTER);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
界面如下:

(4)GridLayout
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Test {
public static void main(String[] args) {
JFrame f = new JFrame("Kannyi的窗体");
f.setSize(400, 300);
f.setLocation(200, 200);
// 设置布局器为GridLayerout,即网格布局器
// 该GridLayerout的构造方法表示该网格是2行3列
f.setLayout(new GridLayout(2, 3));
JButton b1 = new JButton("甲");
JButton b2 = new JButton("乙");
JButton b3 = new JButton("丙");
JButton b4 = new JButton("丁");
JButton b5 = new JButton("戊");
f.add(b1);
f.add(b2);
f.add(b3);
f.add(b4);
f.add(b5);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
界面如下:

(5)setPreferredSize
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Test {
public static void main(String[] args) {
JFrame f = new JFrame("Kannyi的窗体");
f.setSize(400, 300);
f.setLocation(200, 200);
f.setLayout(new FlowLayout());
JButton b1 = new JButton("甲");
JButton b2 = new JButton("乙");
JButton b3 = new JButton("丙");
// 即便使用布局器,也可以通过setPreferredSize,向布局器建议该组件显示的大小
b3.setPreferredSize(new Dimension(180, 40));
f.add(b1);
f.add(b2);
f.add(b3);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
界面如下:

(6)CardLayout
界面如下:
<组件>
(1)标签
界面如下:
(2)使用JLabel显示图片
界面如下:
(3)按钮
界面如下:
(4)复选框
界面如下:
(5)单选框
界面如下:
(6)按钮组
界面如下:
(7)下拉框
界面如下:
(8)对话框
界面如下:
(9)文本框
界面如下:
(10)密码框
界面如下:
(11)文本域
界面如下:
(12)进度条
界面如下:
(13)文件选择器
界面如下:
<面板>
(1)基本面板
界面如下:
(2)ContentPane
界面如下:
(3)SplitPanel
界面如下:
(4)JScrollPanel
界面如下:
(5)TabbedPanel
界面如下:
(6)CardLayerout
界面如下:
<菜单>
(1)菜单栏和菜单
package practice;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
public class Test33 {
public static void main(String[] args) {
JFrame f = new JFrame("Kannyi");
f.setSize(400, 300);
f.setLocation(200, 200);
//菜单栏
JMenuBar mb = new JMenuBar();
//菜单
JMenu mHero = new JMenu("英雄");
JMenu mItem = new JMenu("道具");
JMenu mWord = new JMenu("符文");
JMenu mSummon = new JMenu("召唤师");
JMenu mTalent = new JMenu("天赋树");
//把菜单加入到菜单栏
mb.add(mHero);
mb.add(mItem);
mb.add(mWord);
mb.add(mSummon);
mb.add(mTalent);
//把菜单栏加入到frame,这里用的是set而非add
f.setJMenuBar(mb);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
界面如下:

(2)菜单项
package practice;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class Test34 {
public static void main(String[] args) {
JFrame f = new JFrame("Kannyi的窗体");
f.setSize(500, 400);
f.setLocation(200, 200);
JMenuBar mb = new JMenuBar();
JMenu mHero = new JMenu("英雄");
JMenu mItem = new JMenu("道具");
JMenu mWord = new JMenu("符文");
JMenu mSummon = new JMenu("召唤师");
JMenu mTalent = new JMenu("天赋树");
//菜单项
mHero.add(new JMenuItem("近战"));
mHero.add(new JMenuItem("远程"));
mHero.add(new JMenuItem("物理"));
mHero.add(new JMenuItem("坦克"));
mHero.add(new JMenuItem("法系"));
mHero.add(new JMenuItem("辅助"));
mHero.add(new JMenuItem("打野"));
mHero.add(new JMenuItem("突进"));
mHero.add(new JMenuItem("男性"));
mHero.add(new JMenuItem("女性"));
//分隔符
mHero.addSeparator();
mHero.add(new JMenuItem("所有"));
mb.add(mHero);
mb.add(mItem);
mb.add(mWord);
mb.add(mSummon);
mb.add(mTalent);
f.setJMenuBar(mb);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
界面如下:

<工具栏>
(1)工具栏
界面如下:
(2)给按钮设置提示信息
界面如下:
(3)禁止工具栏拖动
界面如下:
<表格>
(1)基本表格
界面如下:
(2)JScrollPane
界面如下:
(3)列宽
界面如下:
(4)TableModel
界面如下:
(5)进一步理解TableModel
界面如下:
(6)TableModel与DAO结合
界面如下:
(7)TableSelectionModel
界面如下:
(8)更新Table
界面如下:
(9)输入项验证
界面如下:
(10)选中指定行
界面如下:
<日期控件>
(1)DatePicker
界面如下:
(2)JXDatePicker
界面如下:
<Swing中的线程>
(1)三种线程
界面如下:
(2)事件调度线程是单线程的
界面如下:
(3)初始化线程
界面如下:
(4)事件调度线程
界面如下:
(5)长耗时任务线程
界面如下:
<皮肤>
界面如下:
【Java项目】GUI图形用户界面(不断更新中!)的更多相关文章
- java第八节 GUI/图形用户界面
/* *第8讲 GUI/图形用户界面 * AWT的基础知识 * GUI全称是Graphical User Interface,即图形用户界面 * JDK中提供了AWT和Swing两个包,用于GUI程序 ...
- AWT是Java基础类 (JFC)的一部分,为Java程序提供图形用户界面(GUI)的标准API
抽象窗口工具包 (Abstract Windowing Toolkit) (AWT)是Java的平台独立的窗口系统,图形和用户界面器件工具包. AWT是Java基础类 (JFC)的一部分,为Java程 ...
- 黑马程序员_<<GUI(图形用户界面)--------1>>
--------------------ASP.Net+Android+IOS开发..Net培训.期待与您交流! -------------------- 1. GUI图形用户界面 1.简述 Gra ...
- JAVA记事本的图形用户界面应用程序含过滤
JAVA记事本的图形用户界面应用程序 过滤 题目简介: 整体分析: 实验代码: package note; import java.awt.EventQueue; import java.awt.ev ...
- JAVA记事本的图形用户界面应用程序含加密
JAVA记事本的图形用户界面应用程序 加密 题目简介: 整体分析: 实验代码: import java.awt.EventQueue; import java.awt.event.ActionEven ...
- JAVA记事本的图形用户界面应用程序
JAVA记事本的图形用户界面应用程序 整体分析: 代码实现: import java.awt.EventQueue; import java.awt.event.ActionEvent; import ...
- java GUI(图形用户界面)
GUI Graphical User Interface(图形用户接口). 用图形的方式,来显示计算机操作的界面,这样更方便更直观. CLI Command line User Interface ( ...
- linux系统中firewalld防火墙管理工具firewall-config(GUI图形用户界面)
firewall-config是firewalld防火墙管理工具的GUI(图形用户界面)版本,几乎可以实现所有以命令行来执行的操作. firewall-config的界面如下图(在终端直接运行fire ...
- 十一:Java之GUI图形Awt和Swing
一. AWT和 Swing AWT 和 Swing 是 Java 设计 GUI用户界面的基础.与 AWT 的重量级组件不同,Swing 中大部分是轻量级组件.正是这个原因,Swing 差点儿无所不能, ...
- GUI(图形用户界面)
一.GUI(图形用户界面) GUI Graphical User Interface(图形用户接口) 用图形的方式,来显示计算机操作的界面,这样更方便更直观 CLI Command line User ...
随机推荐
- Activity 四种launchMode
launchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的 Activity实例,是否和其他Activity实例公用一个tas ...
- 效果CSS实现三角
<view class="hd"></view>.hd { content: ""; height: 16rpx; wi ...
- .net core系列之《.net core中使用集成IDistributedCache接口的Redis和MongoDB实现分布式缓存》
分布式的缓存可以提高性能和可伸缩性的 ASP.NET Core 应用程序,尤其是托管在云中或服务器场中时. 什么是分布式的缓存 分布式的缓存由多个应用程序服务器共享,缓存中的信息不存储在单独的 Web ...
- [翻译] VICMAImageView
VICMAImageView https://github.com/vitoziv/VICMAImageView Change image view's content mode with your ...
- 第三课 java编程入门
java特点: 1.面对象性 2.可移植性/跨平台性 java组成: jdk(java工具开发工具包) / \ \ jre 指令集合 api和常用 ...
- Java实例---flappy-bird实例[最终版]
代码分析 解析版: Java实例---flappy-bird实例解析 完整版: TestBirdFly.java package testfly; import java.awt.Color; imp ...
- 使用TryUpdateModel进行数据更新
在控制器中可以使用TryUpdateModel或者UpdateModel方法来对指定的数据Model进行更新,如图所示的更新操作. POST请求数据如下所示 使用如下代码就可以对指定的字段进行更新 使 ...
- Java集合框架中的快速失败(fail—fast)机制
fail-fast机制,即快速失败机制,是java集合框架中的一种错误检测机制.多线程下用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加.删除),则会抛出Concurre ...
- java万年历
import java.util.Scanner; public class perpetualCalendar { public static void main(String[] args) { ...
- BZOJ2780:[SPOJ8093]Sevenk Love Oimaster(广义SAM)
Description Oimaster and sevenk love each other. But recently,sevenk heard that a girl named ChuYuXu ...