Java swing (GUI)的动态实现案例

Java  swing (GUI)的动态实现案例:

1、创建一个JFrame,要显示的N个JLabel和JTextField被一个JPanel包含;

2、窗口大小不可变,N大于一定数量时显示滚动条;

4、响应JTextField值变更事件;

3、点击JButton时响应发送JTextField值事件;

 

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

public class DataSendRecDemo extends JFrame {

    private static final long serialVersionUID = 1L;

    private String[] labelName = {"name",
                                  "address",
                                  "ID",
                                  "param4",
                                  "param5",
                                  "param6",
                                  "param7",
                                  "param8",
                                  "param9"
                                  };

    private String[] textValue = {"tp",
                                  "xxxx",
                                  "1234",
                                  "www",
                                  "00001",
                                  "0123456789",
                                  "abc",
                                  "123",
                                  "20120917090233"
                                  };

    private JPanel jPanel;
    private JLabel jLabel;
    private JTextField jTextField;
    private JButton jButton;
    private String[] textValueTemp = textValue;
    
    public DataSendRecDemo() {
        super();
        initFrame();
    }
    
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                DataSendRecDemo srDemon = new DataSendRecDemo();
                srDemon.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                srDemon.setVisible(true);
                srDemon.setLocation(100, 100);
                srDemon.setResizable(false);
            }
        });
    }
    
    public void initFrame() {
        setTitle("The demon of the iphone send data");
        setSize(350, 222);
        
        jPanel = new JPanel();
        jPanel.setBorder((BorderFactory.createTitledBorder("Send type struct by key : value")));
        jPanel.setLayout(new GridLayout(labelName.length, 2));
        
        // 动态追加JLabel和JTextField
        for (int i = 0; i < labelName.length; i++) {
            jLabel = new JLabel(labelName[i], SwingConstants.LEFT);
            jLabel.setFont(new Font("ITALIC", 0, 14));
            
            jTextField = new JTextField(textValue[i], SwingConstants.RIGHT);
            jTextField.setFont(new Font("Dialog", 0, 12));
            // 让动态追加的JLabel和JTextField相互匹配
            jTextField.setName(labelName[i]);
            
            // 给动态追加的JTextField绑定值变更事件
            jTextField.addFocusListener(new FocusListener() {
                String valChangedBef = "";
                String valChangedAft = "";
                String focusName = "";
                JTextField focusValue;
                
                @Override
                public void focusLost(FocusEvent e) {
                    focusValue = (JTextField) e.getComponent();
                    valChangedAft = focusValue.getText();
                    
                    if(!valChangedBef.equals(valChangedAft)){
                        focusName = e.getComponent().getName().toString();
                        
                        for (int j = 0; j < labelName.length; j++) {
                            if (focusName.equals(labelName[j])) {
                                textValueTemp[j] = valChangedAft;
                            }
                        }
                    }
                }
                
                @Override
                public void focusGained(FocusEvent e) {
                    focusValue = (JTextField)e.getComponent();
                    valChangedBef = focusValue.getText();
                }
            });
            
            jPanel.add(jLabel);
            jPanel.add(jTextField);
            add(jPanel, BorderLayout.CENTER);
        }
        
        JPanel panel = new JPanel();
        jButton = new JButton("Send Data");
        
        jButton.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                String sendDataStr = "";
                for (int k = 0; k < labelName.length; k++) {
                    sendDataStr += "'" + labelName[k] + "':'" + textValueTemp[k] + "',";
                }
                
                sendDataStr = "{" + sendDataStr.substring(0, sendDataStr.length() - 1) + "}";
                // 响应JButton事件,发送所有与JLabel一一对应的JTextField数据
                sendData(sendDataStr);
            }
        });

        panel.add(jButton);
        add(panel, BorderLayout.SOUTH);
        
        JPanel panelN = new JPanel();
        add(panelN, BorderLayout.NORTH);
        JPanel panelW = new JPanel();
        add(panelW, BorderLayout.WEST);
        JPanel panelE = new JPanel();
        add(panelE, BorderLayout.EAST);
        
        // 给JPanel追加垂直滚动条
        addScroll();
    }
    
    public void sendData(String sendData) {
        
        System.out.println("strMsgjson: " + sendData);
    }
    
    public void addScroll() {
        Container scrollPanel = getContentPane();
        JScrollPane jScrollPane = new JScrollPane(jPanel);
        
        scrollPanel.setPreferredSize(new Dimension(400, 280));
        scrollPanel.add(jScrollPane);
        scrollPanel.setVisible(true);
    }
}
 

 

 

Java GUI编程炫酷皮肤包设计与应用实战 如果预设样式不够用怎么办?JavaFX允许你深入到底层,创建完全自定义的Skin。比如我们要做一个环形进度条:});@Override看到没?我们完全控制了绘制逻辑,但依然保留了JavaFX强大的布局和事件系统。这才是真正的“自由而不失控”。Event Dispatch Thread(事件调度线程),所有UI更新必须在这里执行。如果你在按钮点击事件里读大文件、连数据库,那整个界面就会冻结——因为EDT被占用了!解决方案?异步任务走起! 阅读详情

相关推荐

自己使用Swing实现的POJOGenerator(POJO代码生成器 v1.2)

POJOGenerator(POJO代码生成器 v1.2) 本POJO代码生成器采用Java的Swing技术编码实现,是绿色免费工具,可以自由传播。 由于本工具的内部实现较菜,所以还请反编译高手手下留情,让我留几分颜面。^_^ 作者本人只用过Oracle、MySQL、MS SQL Server这三款数据库产品,所以制作成exe 可执行文件时只添入了这三款数据库的驱动支持。如果您需要使用这款工具从其它 数据库中生成POJO,那么您可以联系我(Email:CodingMouse@gmail.com),我会 添加其它数据库的驱动支持后通过电子邮件发送给您。 简单的使用说明: 1、先将压缩档解压到任意文件夹。 2、可以预先在配置档cmsdk4j.cfg.xml中设定您的数据库服务器配置,配置档中已经 提供了默认的配置信息,您仅需在此基础上修改部分参数(如:IP地址、端口号、 用户名、密码、数据库名等),这些参数将作为生成器的预设数据库连接配置参数。 3、可以预先在配置档generator.cfg.xml中设定您的数据类型映射方案,配置档中已经 提供了MS SQL Server和Oracle两种映射方案,当然,可能有不太完整的地方,您可以 根据实际情况稍作修改即可。需要注意的一点是ref属性表示引用同一映射方案的另一 映射,这样您便可以简化同一映射数据类型的配置;而import属性是指定需要在最终 生成的源代码中作为类最开始的package类型导入声明部分的导入类型名称,因此,这 个名称是完整带包名的类名称,否则不能正确生成最终代码。配置档中提供的默认配置 如果不能满足你的需要,也可以自行根据实际情况进行修改。 4、所有配置档仅在工具启动初始读取一次并缓存到内存中,因此,如果您是在工具运行 时修改的配置档,请重新启动本工具以使新的配置生效。并且,所有配置档的XML结构均 不能修改,只能修改其节点间的文本值或属性值,否则会导致本工具无法工作。 5、所有最终代码生成效果都可以在左边的代码预览区域中查看和进行二次修改,点击 【写入磁盘文件】按钮生成到磁盘文件时将以代码预览区中的内容为准。当然,通常 更好的做法是将最终代码生成后拷贝到您的项目对应文件夹中。最好不要直接指向您的 项目文件夹,因为本工具会直接覆盖掉指定目录中同名的文件。最终生成的代码文件以 .java为扩展名。 如果您有好的建议,请发送留言到作者博客:http://blog.youkuaiyun.com/CodingMouse 或发送邮件到:CodingMouse@gmail.com 本工具已经打包成exe可执行文件,便于在Window环境下运行,但仍需要你的机器上 安装至少1.5版本的jre环境。 关联文章: http://blog.youkuaiyun.com/CodingMouse/archive/2009/07/13/4345782.aspx http://www.java2000.net/p17774 By CodingMouse 2009年7月14日

JAVA GUI界面动态背景图设计

Java基础项目中GUI界面动态背景设计问题,让你的界面更加高级!

qq_63112064的博客 2564

Java图形实现json格式化

类似于Json的在线解析。使用Java图形实现Json的本地格式化,是一个本地Json格式化的工具,提供源码下载。

基于Java Swing 实现的gui扫雷游戏(超详细每行代码都有注释)

超详细Java Swing实现扫雷游戏

zxwyhzy的博客 2615

json字符串工具

json字符串查看器,可以格式化字符串,更直观

js实现动态UI的布局

实现动态UI的布局,改变位置,布局,动态添加

JAVA学习第九课:用Swing开发GUI程序

emo\eeemo

林一百二十八的博客 1092

手把手教你用CANape调试XCP安全会话:DLL权限管理+四种加密模式实战演示

本文详细介绍了如何使用CANape调试XCP安全会话,重点解析了DLL权限管理的实现与配置方法,并通过实战演示了标定页切换、DAQ测量、STIM旁路和PGM刷写四种典型加密模式的操作流程与调试技巧,帮助工程师深入理解并掌握XCP安全访问机制。

smartcontract5的博客 562

java swing动态更新ui_使用 Swing 进行动态界面设计

使用 Swing 进行动态界面设计通往 Swing API 外部领域的旅程Peter Seebach2006 年 6 月 30 日发布Swing 工具包提供各种用于创建用户界面的工具和几乎令人眼花缭乱的选项,这些选项用于在程序生存期间修改界面。小心地使用这些功能可以导致界面能够适应用户的需要并简化交互过程。粗心地使用同样的功能可以导致非常混乱或彻底不可用的程序。本文介绍动态 UI 的技术和体系,并...

weixin_29028611的博客 2059

保姆级教程:用GROMACS的FEP方法计算小分子结合自由能(附完整mdp配置)

本文提供了一份详细的GROMACS自由能微扰(FEP)计算教程,涵盖从系统准备、参数配置到结果分析的全流程。通过具体案例演示如何计算小分子结合自由能,包括λ窗口设计、动力学参数优化及并行化执行技巧,帮助研究者克服FEP计算中的常见问题,获得可靠的自由能数据。

weixin_30598225的博客 353

MQTT阿里云OTA 调试记录

2.验证,这个验证是什么意思呢,就是阿里云会把你包的信息,比如包大小,streamid(相当于包的识别码),版本号发送给你的设备,然后如果你没发送升级成功的包给阿里云,这里会是一直验证中的状态,那你的设备每次重新连接阿里云,发送connect包给阿里云的时候,阿里云就会发送一次这个验证(upgrade)包。提取到了之后就可以发送请求包了,这个请求包比较坑,也可能是我没付费,他的包一次最多只有1024个字节的数据。之前说了,验证状态下,设备发送connect包给阿里云,阿里云就会发一个upgrade包给你。

qq_42585211的博客 1231

Java基础-GUI编程讲解

Java的GUI编程详细讲解,附上一个贪吃蛇小游戏的源码!

llx522的博客 3863

光电转换器件PMT,APD总结

PMT和APD都属于单点探测器,只能探测光子信息,可以通过扫描方式测光谱。 1. PMT PMT:光电倍增管,是光子技术器件中的一个重要产品,它是一种具有极高灵敏度和超快时间响应的光探测器件。 原理:光电倍增管是一种真空器件。它由光电发射阴极(光阴极)和聚焦电极、电子倍增极及电子收集极(阳极)等组成。当光照射到光阴极时,光阴极向真空中激发出光电子。这些光电子按聚焦极电场进入倍增系统,并通过进一步的二次发射得到的倍增放大。然后把放大后的电子用阳极收集作为信号输出。 优点:因为采用了二次发射倍增系统,.

Ammon_Zhang的博客 1万+

java gui 2

1,编写程序,随机生成两个数,用户输入两个数的和,并进行评判。程序的初始界面如下: 点击“获取题目”,随机生成两个100以内的int类型的数,界面如下: 提示: (1)使用java.util.Random类的nextInt(int n)生成一个100以内的随机数。nextInt(int n) 的作用: 返回一个介于 0(包括)和指定值n(不包括)之间均匀分布的 int 值。 (...

weixin_30633405的博客 369

用HFSS复现经典论文:从零搭建带孔缝屏蔽箱体模型(附完整建模步骤与避坑指南)

本文详细介绍了如何使用HFSS电磁仿真软件复现经典论文中的带孔缝屏蔽箱体模型,包括从零搭建模型、设置激励与边界条件、求解优化及结果验证的全过程。特别提供了建模中的布尔运算陷阱、激励设置技巧等实操难点的避坑指南,帮助工程师和学生深入理解电磁屏蔽效能研究。

weixin_30530339的博客 157

打造AI智能体员工,我用扣子复刻了华与华、奥美和金枪大叔

这事说穿了,就是你用多个AI智能体,分别扮演专业角色,构成一支能力互补、各司其职的“数字团队”。每个智能体,都有明确的角色设定、任务边界和接口形式。它不再是一个泛泛的ChatGPT,而是你手下的“品牌顾问”、“策略专家”、“文案大神”、“短视频导演”、“运营总监”。简单来说,你不再是雇一个人,而是养一群机器人打工——24小时不摸鱼,不请假,不离职。如果你是个人创业者、内容创作者、培训机构、中小企业主,其实都可以尝试构建属于你自己的“AI虚拟员工矩阵”。

互联网架构师笔记 1498

swing其他高级面板

分割面板的简单使用 import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JSplitPane; public class ExampleFrame extends JFrame { /** * */ private stati

blue_sky_wait_me 441

静态时序分析—set_sense

set_sense 常见用法

m0_61544122的博客 1万+

Runnable的应用线程实现文本的变换显示

package com.hbsi; import java.awt.Font; import javax.swing.*; public class TestThread extends JFrame implements Runnable { int i=0; JLabel label; String[] content={"河北软件职业技术学院","河软优快云乐知学院","软件开...

weixin_30625691的博客 88

Vue - 快速入门,这一套就够了!(Vue core + 案例 + 效果演示)

前置条件:掌握 HTML、CSS、JavaScript、AJAX.工具:VsCode.插件:Live Server(浏览器实时预览)Ps:建议都提前下载下来,没网的时候也能用.

CYK_byte的博客 4万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java图形编辑器代码_java文本编辑器v1.0 图形用户界面

package com.rgy.entity;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.GraphicsEnvironment;import java.awt.event.ActionEvent;import ja...

weixin_42512936的博客 269

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java密码登陆错误_登陆界面没问题但是 输入用户名和密码就出现了错误

该楼层疑似违规已被系统折叠隐藏此楼查看此楼public void windowClosing(WindowEvent e){System.exit(0);} });}// MainWindow结束public void mySetQuestionText(TextArea text){try{//读入文件File file=new File("text.txt");FileReader read...

weixin_42470196的博客 923

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

简易的学籍管理系统

一代码 import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; public class TestStudentManager { private int rows = 0; private String[][] unit = new String[rows][5...

实践求真知 1481

Java swing的动态实现案例

Java  swing (GUI)的动态实现案例: 1、创建一个JFrame,要显示的N个JLabel和JTextField被一个JPanel包含; 2、窗口大小不可变,N大于一定数量时显示滚动条; 4、响应JTextField值变更事件; 3、点击JButton时响应发送JTextField值事件; package com.hblb.swing; im

LzwGlory的专栏 3074

Java基础——GUI——Swing中常用容器和组件

1.swing中常用容器 (1)JFrame 常用方法: 1.构造方法: 2.设置窗体可见: 3.设置点击窗体的执行的操作:. 4.设置窗体的大小和位置 等价于上面两个方法 不管窗体多大,窗体运行起来都会出现在屏幕的中心 5.获取窗体容器:在容器中添加和删除组件: 做完添加和删除之后最好刷新容器: ...

波波鱼的博客 1万+
上一篇: JS 判断一个值是否为数字
下一篇: JS 关于(function( window, undefined ) {})(window)写法的理解
TpingSpace
博客等级 码龄15年 1粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值