本文目录

  • 入门实例

    • 先整一个图形化界面出来
  • 常用布局
    • 流式布局
    • 网格布局
    • 边界布局
    • 边界布局
  • 四个入门实例(附截图)
  • 一个小demo(单词计数)
  • 一个较为完整的demo
  • Java (Swing)文件版学生信息管理系统(JTable实现)

入门实例

  • 先整一个图形化界面出来
package swing;import javax.swing.*;public class Demo {public static void main(String[] args) {// 2. 创建中间容器(面板容器)JPanel panel = new JPanel();                // 创建面板容器,使用默认的布局管理器// 3. 创建一个基本组件(按钮),并添加到 面板容器 中JButton btn = new JButton("测试按钮");panel.add(btn);// 5. 显示窗口,前面创建的信息都在内存中,通过 jf.setVisible(true) 把内存中的窗口显示在屏幕上。// 1. 创建一个顶层容器(窗口)JFrame jf = new JFrame("测试窗口");          // 创建窗口jf.setContentPane(panel);// 4. 把 面板容器 作为窗口的内容面板 设置到 窗口jf.setSize(250, 250);                       // 设置窗口大小jf.setLocationRelativeTo(null);             // 把窗口位置设置到屏幕中心jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 当点击窗口的关闭按钮时退出程序(没有这一句,程序不会退出)jf.setVisible(true);}}

常用布局

流式布局

package swing;import javax.swing.*;
import java.awt.*;public class Main {public static void main(String[] args) {// 创建内容面板,指定使用 流式布局JPanel panel = new JPanel(new FlowLayout());JButton btn01 = new JButton("按钮01");JButton btn02 = new JButton("按钮02");JButton btn03 = new JButton("按钮03");JButton btn04 = new JButton("按钮04");JButton btn05 = new JButton("按钮05");panel.add(btn01);panel.add(btn02);panel.add(btn03);panel.add(btn04);panel.add(btn05);JFrame jf = new JFrame("测试窗口");jf.setContentPane(panel);jf.setSize(200, 250);jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);jf.setLocationRelativeTo(null);jf.setVisible(true);        // PS: 最后再设置为可显示(绘制), 所有添加的组件才会显示}
}

网格布局

package swing;import javax.swing.*;
import java.awt.*;public class Main {public static void main(String[] args) {// 创建 3 行 3 列 的网格布局GridLayout layout = new GridLayout(3, 3);// 设置 水平 和 竖直 间隙// layout.setHgap(10);// layout.setVgap(10);JPanel panel = new JPanel(layout);JButton btn01 = new JButton("按钮01");JButton btn02 = new JButton("按钮02");JButton btn03 = new JButton("按钮03");JButton btn04 = new JButton("按钮04");JButton btn05 = new JButton("按钮05");JButton btn06 = new JButton("按钮06");JButton btn07 = new JButton("按钮07");JButton btn08 = new JButton("按钮08");panel.add(btn01);panel.add(btn02);panel.add(btn03);panel.add(btn04);panel.add(btn05);panel.add(btn06);panel.add(btn07);panel.add(btn08);JFrame jf = new JFrame("测试窗口");jf.setContentPane(panel);jf.setSize(200, 250);jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);jf.setLocationRelativeTo(null);jf.setVisible(true);}
}

边界布局

package swing;import javax.swing.*;
import java.awt.*;public class Main {public static void main(String[] args) {// 创建内容面包容器,指定使用 边界布局JPanel panel = new JPanel(new BorderLayout());// 创建 5 个按钮JButton btnN = new JButton("Button_North");JButton btnS = new JButton("Button_South");JButton btnW = new JButton("Button_West");JButton btnE = new JButton("Button_East");JButton btnC = new JButton("Button_Center");// 把 5 个按钮添加到容器中的 5 个方位panel.add(btnN, BorderLayout.NORTH);panel.add(btnS, BorderLayout.SOUTH);panel.add(btnW, BorderLayout.WEST);panel.add(btnE, BorderLayout.EAST);panel.add(btnC, BorderLayout.CENTER);JFrame jf = new JFrame("测试窗口");jf.setSize(350, 250);jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);jf.setContentPane(panel);jf.setLocationRelativeTo(null);jf.setVisible(true);}
}

实例1:

  • 编写拥有垂直Box (boxl)和水平Box (box2) 两类Box的BoxLayout.
  • 具体代码实现
package layoutDemo;import javax.swing.*;
import java.awt.*;public class BoxLayoutDemo {public static void main(String[] args) {JButton btn01 = new JButton("Button01");JButton btn02 = new JButton("Button02");JButton btn03 = new JButton("Button03");JButton btn04 = new JButton("Button04");JButton btn05 = new JButton("Button05");// 创建一个垂直箱容器,放置上面两个水平箱(Box组合嵌套)Box vBox = Box.createVerticalBox();vBox.add(Box.createRigidArea(new Dimension(300,0)));//Dimension类只是用来封装单个对象中组件的宽度和高度,此处表示jb1上方的距离vBox.add(btn04);vBox.add(Box.createVerticalStrut(20));//添加高度为20的垂直支架,也就是jb1和jb2之间的距离vBox.add(btn05);// 创建第一个水平箱容器Box hBox = Box.createHorizontalBox();hBox.add(btn01);hBox.add(Box.createHorizontalStrut(20));hBox.add(btn02);hBox.add(Box.createHorizontalGlue()); // 添加一个水平方向胶状的不可见组件,撑满剩余水平空间hBox.add(Box.createHorizontalStrut(20));hBox.add(btn03);vBox.add(Box.createVerticalStrut(100));vBox.add(hBox);JFrame jf = new JFrame("测试窗口");jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);jf.setContentPane(vBox);jf.setSize(400, 300);jf.setLocationRelativeTo(null);jf.setVisible(true);}}

实例2:

  • 编写拥有顶层容器Container和中间容器Jpane的CardLayout.要求给jbn按钮注册监听器,点击jbn按钮时可切换容器中的下一张卡片(共设置六张卡片)。
  • 具体代码实现
package layoutDemo;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;public class CardLayoutDemo extends JFrame {private JPanel cardPanel = null; // 主要的JPanel,该JPanel的布局管理将被设置成CardLayoutprivate JPanel controlPanel = null; // 放按钮的JPanelprivate CardLayout card = null; // CardLayout布局管理器private JButton btnNext = null; // 下一步private JPanel p_1 = null, p_2 = null, p_3 = null,p_4 = null, p_5 = null, p_6 = null; // 要切换的三个JPanelpublic CardLayoutDemo() {super("CardLayoutDemo 窗口");try {// 将LookAndFeel设置成Windows样式UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");} catch (Exception ex) {ex.printStackTrace();}/**创建一个具有指定的水平和垂直间隙的新卡片布局*/card = new CardLayout(5, 5);cardPanel = new JPanel(card); // JPanel的布局管理将被设置成CardLayoutcontrolPanel = new JPanel(); // 构造放按钮的JPanelbtnNext = new JButton("下一张 >");controlPanel.add(btnNext);p_1 = new JPanel();p_2 = new JPanel();p_3 = new JPanel();p_4 = new JPanel();p_5 = new JPanel();p_6 = new JPanel();p_1.setBackground(Color.GREEN);p_2.setBackground(Color.MAGENTA);p_3.setBackground(Color.WHITE);p_4.setBackground(Color.PINK);p_5.setBackground(Color.CYAN);p_6.setBackground(Color.ORANGE);p_1.add(new JLabel("第一页"));p_2.add(new JLabel("第二页"));p_3.add(new JLabel("第三页"));p_4.add(new JLabel("第四页"));p_5.add(new JLabel("第五页"));p_6.add(new JLabel("第六页"));cardPanel.add(p_1, "p1");cardPanel.add(p_2, "p2");cardPanel.add(p_3, "p3");cardPanel.add(p_4, "p1");cardPanel.add(p_5, "p2");cardPanel.add(p_6, "p3");/**下面是翻转到卡片布局的某个组件,可参考API中的文档*/btnNext.addActionListener(new ActionListener(){ // 下一步的按钮动作public void actionPerformed(ActionEvent e) {card.next(cardPanel);}});this.getContentPane().add(cardPanel);this.getContentPane().add(controlPanel, BorderLayout.SOUTH);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setSize(300, 200);this.setVisible(true);}public static void main(String[] args) {new CardLayoutDemo();}}

实例3:

  • 编写2行,4列,行间距为40,列间距为40的GridLayout。要求初始化七个Button。
  • 设置窗体出现在屏幕中央
  • 具体代码实现
package layoutDemo;import javax.swing.*;import java.awt.*;public class GridLayoutDemo {public static void main(String[] args) {// 创建 3 行 3 列 的网格布局GridLayout layout = new GridLayout(2, 4);// 设置 水平 和 竖直 间隙layout.setHgap(40);layout.setVgap(40);JPanel panel = new JPanel(layout);JButton btn01 = new JButton("按钮01");JButton btn02 = new JButton("按钮02");JButton btn03 = new JButton("按钮03");JButton btn04 = new JButton("按钮04");JButton btn05 = new JButton("按钮05");JButton btn06 = new JButton("按钮06");JButton btn07 = new JButton("按钮07");
//        JButton btn08 = new JButton("按钮08");panel.add(btn01);panel.add(btn02);panel.add(btn03);panel.add(btn04);panel.add(btn05);panel.add(btn06);panel.add(btn07);
//        panel.add(btn08);JFrame jf = new JFrame("GridLayoutDemo窗口");jf.setContentPane(panel);jf.setSize(600, 500);jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);jf.setLocationRelativeTo(null);jf.setVisible(true);}
}

实例4:

要求:
  • 字符串大小写转换:创建一个Jframe,里面包含1个TextField, 1个TextArea, 1个Button。
  • 给Button添加ActionListener监听器,实现按钮点击。
  • 在TextField中输入英文字符串,点击button后,将字符串中的大小写字符互换,显示在TextArea中。
具体代码实现
package cust.aowei;import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;public class SwingLinsterDemo {public static void main(String[] args) {// TODO Auto-generated method stubSwingLinster swingLinster = new SwingLinster();}}
class SwingLinster {public SwingLinster(){JPanel panel = new JPanel();                // 创建面板容器,使用默认的布局管理器final JTextField textField = new JTextField(8);final JTextField result = new JTextField(8);result.setFont(new Font(null, Font.PLAIN, 20));textField.setFont(new Font(null, Font.PLAIN, 20));panel.add(textField);panel.add(result);// 创建一个按钮,点击后获取文本框中的文本JButton btn = new JButton("提交");btn.setFont(new Font(null, Font.PLAIN, 20));panel.add(btn);// 5. 显示窗口,前面创建的信息都在内存中,通过 jf.setVisible(true) 把内存中的窗口显示在屏幕上。// 1. 创建一个顶层容器(窗口)JFrame jf = new JFrame("测试窗口");          // 创建窗口jf.setContentPane(panel);// 4. 把 面板容器 作为窗口的内容面板 设置到 窗口jf.setSize(400, 250);                       // 设置窗口大小jf.setLocationRelativeTo(null);             // 把窗口位置设置到屏幕中心jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 当点击窗口的关闭按钮时退出程序(没有这一句,程序不会退出)jf.setVisible(true);//监听按钮btn.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("提交: " + textField.getText());result.setText(Transformation(textField.getText()));}});}public String Transformation(String a){System.out.println("Transformation");char []tmp = a.toCharArray();for(int i = 0; i<a.length();i++){char t = tmp[i];System.out.println("for");if(t<= 90 && t>= 65){tmp[i]= Character.toLowerCase(t);System.out.println("转换为小写"+t);}else if(t<= 122 && t>= 97){tmp[i]= Character.toUpperCase(t);System.out.println("转换为大写"+t);}}System.out.print("转换后:"+String.valueOf(tmp));return String.valueOf(tmp);}
}

单词计数

要求:
  • 在textField(上)中填入输入文件路径(文件自己创建)点击button (上)后(判断是否存在),
  • 如果存在该路径,读取该文件内容,统计单词数量,以(单词,数量)的形式展示在textArea中。
  • 在textField(下)中填入输出文件路径,点击button(下)
  • 如果存在textField(下)中的文件则删除后创建,将textArea中的内容存入该文件
实现效果
  • 在项目根目录下新建aaa.txt
  • 添加内容
  • 在对应文本框中输入文件名,点击读取
  • 读取的内容将按照特定格式显示在文本域中
  • 在对应文本框中输入文件名,点击写入
  • 文本域中内容将被写入文件中
具体代码实现
package cust.aowei.swingFile;import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;public class SwingFileDemo {public static void main(String[] args){SwingFile swingfile = new SwingFile();}}class SwingFile {private String fileContent;private JTextArea textArea;public SwingFile(){JPanel panel = new JPanel();                // 创建面板容器,使用默认的布局管理器final JTextField textFieldTop = new JTextField(8);final JTextField textFieldLow = new JTextField(8);textFieldTop.setFont(new Font(null, Font.PLAIN, 20));textFieldLow.setFont(new Font(null, Font.PLAIN, 20));panel.add(textFieldTop);// 创建一个按钮,点击后获取文本框中的文本JButton btnTop = new JButton("读取");btnTop.setFont(new Font(null, Font.PLAIN, 20));panel.add(btnTop);panel.add(textFieldLow);JButton btnLow = new JButton("写入");btnLow.setFont(new Font(null, Font.PLAIN, 20));panel.add(btnLow);textArea = new JTextArea(50,20);panel.add(textArea);// 5. 显示窗口,前面创建的信息都在内存中,通过 jf.setVisible(true) 把内存中的窗口显示在屏幕上。// 1. 创建一个顶层容器(窗口)JFrame jf = new JFrame("测试窗口");          // 创建窗口jf.setContentPane(panel);// 4. 把 面板容器 作为窗口的内容面板 设置到 窗口jf.setSize(300, 500);                       // 设置窗口大小jf.setLocationRelativeTo(null);             // 把窗口位置设置到屏幕中心jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 当点击窗口的关闭按钮时退出程序(没有这一句,程序不会退出)jf.setVisible(true);//监听按钮btnTop.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {try {fileRead(textFieldTop.getText());} catch (Exception e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}});btnLow.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {try {fileWrite(textFieldLow.getText());} catch (Exception e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}});}public void fileRead(String fileName) throws Exception{File f = new File(fileName);FileInputStream fip = new FileInputStream(f);// 构建FileInputStream对象InputStreamReader reader = new InputStreamReader(fip, "UTF-8");// 构建InputStreamReader对象,编码与写入相同StringBuffer sb = new StringBuffer();while (reader.ready()) {sb.append((char) reader.read());// 转成char加到StringBuffer对象中}String content = sb.toString();countWords(content);textArea.setText(fileContent);reader.close();// 关闭读取流fip.close();// 关闭输入流,释放系统资源}public void fileWrite(String fileName) throws Exception{File f = new File(fileName);FileOutputStream fop = new FileOutputStream(f);// 构建FileOutputStream对象,文件不存在会自动新建OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");// 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbkwriter.append(fileContent);writer.close();// 关闭写入流,同时会把缓冲区内容写入文件,所以上面的注释掉fop.close();// 关闭输出流,释放系统资源textArea.setText("写入成功");}public void countWords(String str){Map<String, Integer> map=new HashMap<String, Integer>();        Pattern p=Pattern.compile("\\b[a-zA-Z-]+\\b");//正则表达式Matcher m=p.matcher(str);while(m.find()){String mstr=m.group();if(map.containsKey(mstr)){map.put(mstr,map.get(mstr)+1);}else{map.put(mstr, 1);}}Set<Entry<String, Integer>> entrySet = map.entrySet();Iterator<Entry<String,Integer>> it=entrySet.iterator();StringBuffer sBuffer = new StringBuffer();sBuffer.append("单词 数量"+"\r\n");while(it.hasNext()){Entry<String, Integer> next = it.next();System.out.println(next.getKey()+" "+next.getValue());sBuffer.append(next.getKey()+"    "+next.getValue()+"\r\n");}fileContent = sBuffer.toString();}}

参考:
https://blog.csdn.net/xietansheng/article/details/72814492
https://www.jb51.net/article/122698.htm


Java (Swing)文件版学生信息管理系统(JTable实现)

Java 图形化界面编程(Swing)入门实例相关推荐

  1. Java图形化界面编程

    Java图形化界面编程(使用AWT) 文章目录  内容概述  容器Container   Window   Panel   ScrollPane   Box  布局管理器   FlowLayout   ...

  2. 双人弹球小游戏 (基于Java图形化界面编程)

    用户界面如下 : 玩法:双方玩家可以分别控制A-D键和←-→键来进行各自球拍的位置,如果某方没有接住小球,则对方获胜,游戏结束. 代码如下: import javax.swing.*; import ...

  3. Java图形化界面编程之——AWT

    目录 1.AWT简介 2.AWT继承体系 3.Container容器 3.1.Container继承体系 3.2.常用API 3.2.1.Component的常用方法 3.2.2.Container的 ...

  4. java 图形化界面编程--awt编程

    二. AWT 编程 2.1 AWT简介 ​ 当 JDK 1.0发布时, Sun 提供了 一套基本的GUI类库,这个GUI类库希望可以在所有平台下都能运行 , 这套基本类库被称为"抽象窗口工具 ...

  5. Java图形化界面编程超详细知识点(7)——进度条

    目录 4 JProgressBar.ProgressMonitor.BoundedRangeModel实现进度条 4.1 创建进度条 4 JProgressBar.ProgressMonitor.Bo ...

  6. Java图形化界面编程超详细知识点(10)——Swing_表格

    目录 7 JTable.TableModel实现表格 7.1 创建简单表格 7.2 TableModel 7 JTable.TableModel实现表格 表格也是GUI程序中常用的组件,表格是一个由多 ...

  7. Java图形化界面编程超详细知识点(9)——Swing_树

    目录 6 JTree.TreeModel实现树 6.1 创建树 6.2 编辑树结点 6.3 监听结点事件 6.4 使用DefaultTreeCellRenderer改变结点外观 6.5 扩展Defau ...

  8. Java图形化界面编程超详细知识点(8)——列表框

    目录 5 JList.JCpmboBox实现列表框 5.1 简单列表框 5.2 不强制存储列表项的ListModel和ComboBoxMedel 5.3 强制存储列表项的DefaultListMode ...

  9. Java图形化界面设计——容器(JFrame)

    Java图形化界面设计--容器(JFrame) 程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构 ...

最新文章

  1. 【翻译】Ext JS 6 Beta发布
  2. 科技议题“破圈”有利还是有弊|观点
  3. python opencv读取网络图片
  4. SSL/TLS握手过程
  5. java args_Java命令行界面(第2部分):args4j
  6. springboot urlresource_Spring Boot上传文件+部署到Tomcat
  7. linux内核死锁检测机制 | oenhan,Linux内核CPU负载均衡机制 | OenHan
  8. JS 客户端浏览器操作、BOM、渗透客户端浏览器(windows对象:screen屏幕操作、location浏览器域名、history浏览器历史、Navigator浏览器信息、cookie)
  9. 程序员抱怨:父母没文化没见识,当初努力学习远离看来是正确的
  10. mysql 数据库的维护,优化
  11. 学校管理 学生会管理系统(SSM)vue+ssm+shiro
  12. 【图像修复】基于matlab GUI三维图像复原【含Matlab源码 963期】
  13. vs没有windows窗体应用_既能防木马病毒又能多开应用,这款软件 Windows 不能没有!...
  14. hashmap hash冲突怎么解决_对HashMap的思考及手写实现
  15. 破解内网火狐所保存的邮箱账号和密码
  16. docker学习笔记(四)使用docker搭建环境
  17. 某音提取真机cookie,cookie参数解密
  18. mysql 列转行union all_sql:mysql:列转行(转为多个字段)
  19. 《计算广告》学习笔记(一)
  20. 应用comsol分析多分支缝压裂应力分布

热门文章

  1. 河工大大一c语言题库,河工大二级C语言题库.doc
  2. linux手误格式化,LINUX下误删除、格式化恢复解决方案(示例代码)
  3. 从0开始学web-day2
  4. PGP应用——如何使用PGP软件?
  5. 站在集成平台的角度去看待医院系统的查询需求
  6. 易语言系列————————窗口_枚举所有子窗口(精易模块)
  7. QCC3040---Handset service module
  8. android 使用ios字体大小,字体大小在iOS和Android上有所不同
  9. html5 模仿苹果桌面,JavaScript模仿桌面窗口
  10. 微信小程序----模板(template)