欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > 关于CodeJava的学习笔记——11

关于CodeJava的学习笔记——11

2025/4/3 0:59:08 来源:https://blog.csdn.net/jimranor/article/details/146880912  浏览:    关键词:关于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();//Hashtablepro.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{@Overridepublic 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+"次");}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词