当前位置: 首页 > news >正文

关于CodeJava的学习笔记——11

一、GUI

1、最简单的GUI

只有一个按钮的GUI

import java.awt.*;
import javax.swing.*;
public class SimpleGUI{
	JFrame frame;
	Button bt;
	public SimpleGUI(){
		frame = new JFrame("标题栏内容");
		bt = new Button("点我啊");
		frame.add(bt);
		frame.setSize(800,600);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(1);
	}
	public static void main(String[] args){
		new SimpleGUI();
	}
}

2、局部管理器

        (1)BorderLayout

        在添加按钮到容器中的时候,可以在后面传入东西南北中的参数,指定他们的布局 

        将容器划分为东、南、西、北、中五个区域,组件放置在容器的边界位置,组件需添加到指定区域,每个区域只能放置一个组件,但中心区域可随窗口大小变化      

import java.awt.*;
import javax.swing.*;
public class TestBorderLayout{
	JFrame frame;
	JButton east,west,south,north,center;
	public TestBorderLayout(){
		frame = new JFrame("演示如何使用BorderLayout");
		east = new JButton("东邪 - 黄药师");
		west = new JButton("西毒 - 欧阳锋");
		south = new JButton("南帝 - 段智兴");
		north = new JButton("北丐 - 洪七公");
		center = new JButton("中神通 - 王重阳");
		frame.setLayout(new BorderLayout());
		//frame.add(east,"East");
		frame.add(west,"West");
		//frame.add(south,"South");
		frame.add(north,"North");
		frame.add(center);

		frame.setSize(800,600);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(3);
	}
	public static void main(String[] args){
		new TestBorderLayout();
	}
}

        (2)FlowLayout

        按照添加顺序从左到右、从上到下流动布局,组件在一行排满后自动换行,直到所有组件添加完毕。默认居中对齐,可通过构造函数设置其他对齐方式,如LEFT(左对齐)、RIGHT(右对齐)等。

import java.awt.*;
import javax.swing.*;
public class TestFlowLayout{
	JFrame frame;
	JPanel panel;
	JLabel lab1,lab2;
	JTextField username,password;
	JButton register,submit,reset;
	public TestFlowLayout(){
		frame = new JFrame("演示如何使用FlowLayout");
		panel = new JPanel(new FlowLayout());
		lab1 = new JLabel("用户名:");
		lab2 = new JLabel("密码:");
		username = new JTextField(12);
		password = new JPasswordField(12);
		register = new JButton("注册用户");
		submit = new JButton("提交登录");
		reset = new JButton("全部重置");

		panel.add(lab1);
		panel.add(username);
		panel.add(lab2);
		panel.add(password);
		panel.add(register);
		panel.add(submit);
		panel.add(reset);

		frame.add(panel);
		frame.setSize(800,80);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(3);

	}
	public static void main(String[] args){
		new TestFlowLayout();
	}
}

        (3)GridLayout

        将容器分割成纵横分隔的网络,组件按从左到右、从上到下的顺序依次添加到网格中,直到所有组件添加完毕或网格被填满

import java.awt.*;
import javax.swing.*;
public class TestGridLayout{
	JFrame frame;
	JPanel panel;
	JButton[] bts;

	public TestGridLayout(){
		frame = new JFrame("演示如何使用GridLayout");
		panel = new JPanel(new GridLayout(4,9));
		bts = new JButton[36];
		for(int i = 0;i<bts.length;i++){
			bts[i] = new JButton(i<10 ? i+"" : (char)(i+87)+"");
			bts[i].setBackground(new Color(255,255,(int)(Math.random()*30)+226));
			panel.add(bts[i]);
		}
		frame.add(panel);
		frame.setSize(800,240);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(3);

	}

	public static void main(String[] args){
		new TestGridLayout();
	}
}

3、窗口

        frame = new JFrame("点餐窗体");命名了这个窗口的名字。

import java.awt.*;
import javax.swing.*;
public class OrderFrame{
	JFrame frame;
	JPanel east,south,center,cc,cs;
	JLabel title,total,pic;
	JButton enter,submit,reset;
	List list;
	public OrderFrame(){
		frame = new JFrame("点餐窗体");
		east = new JPanel(new BorderLayout());//东西南北中
		south = new JPanel(new FlowLayout());//居中
		center = new JPanel(new BorderLayout());
		cc = new JPanel(new BorderLayout());
		cs = new JPanel(new FlowLayout());
		
		title = new JLabel("海鲜开会 : 880 元");
		total = new JLabel("当前总共 : 0 元");
		pic = new JLabel(new ImageIcon("海鲜煲.jpg"));
		enter = new JButton("我要点这道菜");
		submit = new JButton("提交菜单");
		reset = new JButton("全部重置");
		list = new List();
		list.add("餐具");
		list.setFont(new Font("宋体",1,18));
		east.add(list);
		south.add(enter);
		south.add(submit);
		south.add(reset);
		south.add(total);
		cs.add(title);
		cc.add(pic);
		
		center.add(cs,"South");
		center.add(cc,"Center");
		frame.add(center,"Center");
		frame.add(east,"East");
		frame.add(south,"South");
		frame.setSize(800,400);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(3);
	}
	public static void main(String[] args){
		new OrderFrame();
	}
}
import java.awt.*;
import javax.swing.*;
public class LoginFrame{
	JFrame frame;
	JPanel top,center,bottom;
	JLabel lab1,lab2,pic;
	JTextField username,password;
	JButton register,submit,reset;
	JButton[] bts;
	public LoginFrame(){
		frame = new JFrame("易途盛世大酒店 只能点 餐系统 v0.8");
		top = new JPanel(new FlowLayout());
		center = new JPanel(new BorderLayout());
		bottom = new JPanel(new GridLayout(4,9));
		lab1 = new JLabel("用户名:");
		lab2 = new JLabel("密码:");
		pic = new JLabel(new ImageIcon("enter.jpg"));
		username = new JTextField(12);
		password = new JPasswordField(12);
		register = new JButton("注册用户");
		submit = new JButton("提交登录");
		reset = new JButton("全部重置");
		bts = new JButton[36];
		for(int i = 0;i<bts.length;i++){
			bts[i] = new JButton(i<10 ? i+"" : (char)(i+87)+"");
			bottom.add(bts[i]);
		}


		center.add(pic);
		addAll(top,lab1,username,lab2,password,register,submit,reset);
		frame.add(top,"North");
		frame.add(center);
		frame.add(bottom,"South");
		frame.setSize(800,600);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(3);
	}
	public static void addAll(Container ctn,Component ... cs){
		for(Component c : cs){
			ctn.add(c);
		}
	}
	public static void main(String[] args){
		new LoginFrame();
	}
}

4、基础菜单

        在 Java 中,Component 是一个类,属于 java.awt 包。它是所有 AWT(Abstract Window Toolkit)组件的基类。AWT 是 Java 提供的一个用于创建图形用户界面(GUI)的工具包。

        具体来说,Component 类是所有 GUI 元素的超类,例如按钮、标签、文本框等。这些组件可以添加到容器(如 PanelFrame 等)中,以便在窗口中显示和交互。

        在我们撰写这样的布局时,需要大量的使用add方法,因此我们不如自己写一个addAll方法,让我们直接可以一次性添加多个工具,这样可以让我们的代码变的更加简介。

import java.awt.*;
import javax.swing.*;
public class TestMenu{
	JFrame frame;
	JMenuBar bar;
	JMenu m1,m2,m3;
	JMenuItem mi11,mi12,mi13,mi21,mi22,mi31,mi32;
	public TestMenu(){
		frame = new JFrame("演示如何使用菜单");
		bar = new JMenuBar();
		m1 = new JMenu("鲁菜");
		m2 = new JMenu("粤菜");
		m3 = new JMenu("川菜");
		mi11 = new JMenuItem("九转大肠");
		mi12 = new JMenuItem("爆炒腰花");
		mi13 = new JMenuItem("糖醋鲤鱼");
		mi21 = new JMenuItem("龙虎斗");
		mi22 = new JMenuItem("果子狸炖水鱼");
		mi31 = new JMenuItem("开水白菜");
		mi32 = new JMenuItem("毛血旺");
		addAll(m1,mi11,mi12,mi13);
		addAll(m2,mi21,mi22);
		addAll(m3,mi31,mi32);
		addAll(bar,m1,m2,m3);
		frame.setJMenuBar(bar);
		frame.setSize(800,600);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(3);
	}
	public void addAll(Container ctn,Component ... cs){
		for(Component c : cs){
			ctn.add(c);
		}
	}
	public static void main(String[] args){
		new TestMenu();
	}
}

5、配置文件

        我们可以创建这样的文件结构,大包套小包,这样可以通过一个config文件,来实现整个的数据的获取。

import java.io.*;
import java.util.*;
public class TestProperties{
	public static void main(String[] args)throws Exception{
		Properties pro = new Properties();//Hashtable
		pro.load(new InputStreamReader(new FileInputStream("config.properties"),"GBK"));

		//System.out.println(pro.getProperty("鲁菜"));//get(k)
		Set<String> ks = pro.stringPropertyNames();//keySet()
		for(String k : ks){
			System.out.println(k);
			String fileName = pro.getProperty(k);
			Properties pro2 = new Properties();
			pro2.load(new InputStreamReader(new FileInputStream(fileName)));

			Set<String> ks2 = pro2.stringPropertyNames();
			for(String k2 : ks2){
				System.out.println("    "+k2+pro2.getProperty(k2));
			}

		}
	}
}

6、动态的菜单栏以及前后端实现

import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
public class OrderFrame{
	JFrame frame;
	JPanel east,south,center,cc,cs;
	JLabel title,total,pic;
	JButton enter,submit,reset;
	java.awt.List list;
	public OrderFrame(){
		frame = new JFrame("点餐窗体");
		createMenu();
		east = new JPanel(new BorderLayout());
		south = new JPanel(new FlowLayout());
		center = new JPanel(new BorderLayout());
		cc = new JPanel(new BorderLayout());
		cs = new JPanel(new FlowLayout());
		title = new JLabel("海鲜煲 : 560 元");
		total = new JLabel("当前总共 : 0 元");
		pic = new JLabel(new ImageIcon("img/海鲜煲.jpg"));
		enter = new JButton("我要点这道菜");
		submit = new JButton("提交菜单");
		reset = new JButton("全部重置");
		list = new java.awt.List();
		list.add("餐具");
		list.setFont(new Font("宋体",1,18));
		east.add(list);
		south.add(enter);
		south.add(submit);
		south.add(reset);
		south.add(total);
		cs.add(title);
		cc.add(pic);
		center.add(cs,"South");
		center.add(cc,"Center");

		frame.add(center,"Center");
		frame.add(east,"East");
		frame.add(south,"South");
		frame.setSize(800,400);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(3);
	}
	public void createMenu(){
		JMenuBar bar = new JMenuBar();

		
		Properties menuPros = new Properties();
		try(InputStreamReader r = new InputStreamReader(new FileInputStream("cfg/config.properties"),"GBK")){
			menuPros.load(r);
		}catch(Exception e){
			e.printStackTrace();
		}
		Set<String> menuNames = menuPros.stringPropertyNames();
		for(String menuName : menuNames){
			JMenu menu = new JMenu(menuName);
			String fileName = menuPros.getProperty(menuName);

			Properties itemPros = new Properties();
			try(InputStreamReader r = new InputStreamReader(new FileInputStream("cfg/"+fileName),"GBK")){
				itemPros.load(r);
			}catch(Exception e){
				e.printStackTrace();
			}
			Set<String> itemNames = itemPros.stringPropertyNames();
			for(String itemName : itemNames){
				JMenuItem mi = new JMenuItem(itemName);
				menu.add(mi);
			}

			bar.add(menu);
		}
		

		frame.setJMenuBar(bar);
	}
	public static void main(String[] args){
		new OrderFrame();
	}
}
import java.awt.*;
import javax.swing.*;
public class LoginFrame{
	JFrame frame;
	JPanel top,center,bottom;
	JLabel lab1,lab2,pic;
	JTextField username,password;
	JButton register,submit,reset;
	JButton[] bts;
	public LoginFrame(){
		frame = new JFrame("易途盛世大酒店 只能点 餐系统 v0.8");
		top = new JPanel(new FlowLayout());
		center = new JPanel(new BorderLayout());
		bottom = new JPanel(new GridLayout(4,9));
		lab1 = new JLabel("用户名:");
		lab2 = new JLabel("密码:");
		pic = new JLabel(new ImageIcon("img/enter.jpg"));
		username = new JTextField(12);
		password = new JPasswordField(12);
		register = new JButton("注册用户");
		submit = new JButton("提交登录");
		reset = new JButton("全部重置");
		bts = new JButton[36];
		for(int i = 0;i<bts.length;i++){
			bts[i] = new JButton(i<10 ? i+"" : (char)(i+87)+"");
			bottom.add(bts[i]);
		}
		center.add(pic);
		addAll(top,lab1,username,lab2,password,register,submit,reset);
		frame.add(top,"North");
		frame.add(center);
		frame.add(bottom,"South");
		frame.setSize(800,600);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(3);
	}
	public static void addAll(Container ctn,Component ... cs){
		for(Component c : cs){
			ctn.add(c);
		}
	}
	public static void main(String[] args){
		new LoginFrame();
	}
}

7、事件监听

        BigEye be = new BigEye();                                    创建一个监听者
        bt.addActionListener(be);                                       让这个监听者看这个按钮的情况

        class BigEye implements ActionListener               创建这个类

        public void actionPerformed(ActionEvent ae)        覆盖这个方法(该方法实现监听的具体功能)

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SimpleGUI{
	JFrame frame;
	JButton bt;
	int time;
	long start;
	public SimpleGUI(){
		frame = new JFrame("标题栏内容");
		bt = new JButton("点我啊");
		bt.setFont(new Font("宋体",1,50));
		BigEye be = new BigEye();
		bt.addActionListener(be);
		frame.add(bt);
		frame.setSize(800,600);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(1);
	}
	public static void main(String[] args){
		new SimpleGUI();
	}
	class BigEye implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent ae){
			if(start == 0){
				start = System.currentTimeMillis();
			}else{
				long now = System.currentTimeMillis();
				if(now - start > 6000){
					JOptionPane.showMessageDialog(frame,"您的APM为:"+time*10);
					return;
				}
			}

			time++;
			bt.setText("我被点了"+time+"次");
		}
	}
}

相关文章:

  • 贪心算法(13)(java)合并区间
  • vscode 使用vue3
  • Linux内核设计——(一)进程管理
  • 2025年汽车加气站操作工备考题库
  • 基于超分辨率与YOLO的多尺度红外小目标检测方法YOLO-MST论文解读
  • OpenCV 图形API(3)高层次设计概览
  • 变量(Variable)
  • 详解VAE损失函数
  • 从零开始学Rust:所有权(Ownership)机制精要
  • Android版本更新服务通知下载实现
  • C++编程指南31 - 除非绝对必要,否则不要使用无锁编程
  • BERT与Transformer到底选哪个-上部
  • 福建省公共数据授权运营实践案例详解(运营机制及模式、运营单位、运营平台、场景案例等)
  • hadoop 集群的常用命令
  • PyTorch量化进阶教程:第六章 模型部署与生产化
  • 【套题】大沥2019年真题——第1~3题
  • Python扩展知识详解:lambda函数
  • 实现在Unity3D中仿真汽车,而且还能使用ros2控制
  • 【Yolov8部署】 VS2019+opencv+onnxruntime 环境下部署目标检测模型
  • Spring框架中的IoC(控制反转)
  • 比较好用的免费素材网/郑州seo外包服务
  • 温州做网站/万网域名查询注册商
  • 蓝色脚手架织梦企业网站模板/怎么自己创建网址
  • 产品经理兼职做网站报酬/自己如何做链接推广
  • 服务器做多个网站/优化什么意思
  • 设计感十足的网站/软件外包公司是什么意思