首页 文章 精选 留言 我的

精选列表

搜索[gui],共2649篇文章
优秀的个人博客,低调大师

数据库 GUI 工具 CH Visualize 新 UI 布局抢先看

DBM 版本1.22.0发布在即!本次升级有重大更新,其中部分UI布局被重做。 话不多说,让我们来看一下新的UI布局结构 构建数据库布局 元数据管理中可视化构建数据库支持对数据库的编码方式和排序规则的设置,目前支持MySQL插件 构建数据表布局 元数据管理中构建表布局也做了修改调整,不同引擎有不同的视图,上图是基本信息录入,下图是数据列布局 接下来是表引擎额外配置信息(一般是ClickHouse引擎) 表引擎额外的配置信息 不同表引擎有不同的配置信息,更多的新UI布局可自行编译源码的develop分支或等待新版本发布下载体验。 源码地址:https://github.com/EdurtIO/dbm/tree/develop 欢迎大家提出宝贵的建议,我们尽可能的在下个版本中实现他。

优秀的个人博客,低调大师

06.Java网络编程(java GUI实现的聊天界面)

目前测试存在两个问题 1.最初是继承Frame来实现界面显示,后来发现,界面中部分控件存在时而显示时而不显示的问题,查找资料之后,将Frame修为JFrame,并且修改setVisible的时机,界面显示的问题解决,不显示的原因,有一种说法就是注释中提到的 2.界面显示问题解决之后,目前接收消息的线程无法正常接收,导致震动功能也无法实现,原因还有待进一步排查 package com.ren.socket; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; import java.awt.Font; import java.awt.Frame; import java.awt.Panel; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedWriter; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.sql.Date; import java.text.SimpleDateFormat; import javax.swing.JFrame; /** * 先调整窗口大小才会显示出组件,而不是立马显示出组件,在组件还未添加到面板前就将窗口 * (JFrame)设为可见(setVisible()),控件并不会引发重绘。解决方法很简单, * 只需要等所有组件都准备好以后才将JFrame的setVisible()设置为true。 * 非要在调用setVisible()之后添加组件,那么你也可以这样做:getContentPane().invalidate(); * * 即便这样做了,也没有达到想要的效果 */ public class GUIChat_UDP extends JFrame{ private static final long serialVersionUID = 1L; private Button send; private Button log; private Button clear; private Button shake; private TextArea viewText; private TextArea sendText; private TextField tField; private DatagramSocket socket; private BufferedWriter writer; public GUIChat_UDP(){ Init(); southPanel(); centerPanel(); event(); getContentPane().invalidate(); } private void centerPanel() { Panel center = new Panel(); //显示的文本区域 viewText = new TextArea(); //发送的文本区域 sendText = new TextArea(); //设置为边界布局管理器 center.setLayout(new BorderLayout()); //发送的文本区域放在南边 center.add(sendText, BorderLayout.SOUTH); //显示区域放在中间 center.add(viewText, BorderLayout.CENTER); //设置不可以编辑 viewText.setEditable(false); //设置背景色 viewText.setBackground(Color.WHITE); //设置字体大小 sendText.setFont(new Font("xxx", Font.PLAIN, 15)); viewText.setFont(new Font("xxx", Font.PLAIN, 15)); //将这个panel设置在中间位置 this.add(center,BorderLayout.CENTER); } private void southPanel() { Panel south = new Panel(); //用于输入聊天对象的IP地址 tField = new TextField(15); tField.setText("127.0.0.1"); send = new Button("send"); log = new Button("log"); clear = new Button("clear"); shake = new Button("shake"); //添加如布局 south.add(tField); south.add(send); south.add(log); south.add(clear); south.add(shake); this.add(south, BorderLayout.SOUTH); } private void Init() { this.setLocation(500, 50); this.setSize(400,600); this.setVisible(true); //开启接收消息线程 new Receive().start(); try { //初始化发送码头 socket = new DatagramSocket(); writer = new BufferedWriter(new FileWriter("log.txt",true)); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private void event() { //关闭按钮事件 this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { try { socket.close(); writer.close(); System.exit(0); } catch (Exception e2) { } } }); //发送按钮事件 send.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { send(); } catch (IOException e1) { e1.printStackTrace(); } } }); //消息记录 log.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { logFile(); } catch (IOException e1) { e1.printStackTrace(); } } }); //清空屏幕 clear.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { viewText.setText(""); } }); //震动 shake.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { send(new byte[]{-1}, tField.getText()); } catch (IOException e1) { e1.printStackTrace(); } } }); //快捷键监听 sendText.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { //control+enter键发送消息 if (e.getKeyCode() == KeyEvent.VK_ENTER && e.isControlDown()) { try { send(); } catch (Exception e2) { } } } }); } //通过不断改变界面在屏幕中的位置达到震动的效果 protected void shake() { int x = this.getLocation().x; int y = this.getLocation().y; for (int i = 0; i < 10; i++) { try { this.setLocation(x + 10, y + 10); Thread.sleep(20); this.setLocation(x + 10, y - 10); Thread.sleep(20); this.setLocation(x - 10, y + 10); Thread.sleep(20); this.setLocation(x - 10, y - 10); Thread.sleep(20); this.setLocation(x, y); } catch (Exception e) { } } } protected void logFile() throws IOException { //刷新缓冲区 writer.flush(); //读取消息记录文件 FileInputStream fis = new FileInputStream("log.txt"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int len; byte[] arr = new byte[8192]; while((len = fis.read(arr))!= -1){ baos.write(arr,0,len); } String log = baos.toString(); viewText.setText(log); fis.close(); baos.close(); } protected void send() throws IOException { String message = sendText.getText(); String ip = tField.getText(); ip = ip.trim().length() == 0?"255.255.255.255":ip; send(message.getBytes(),ip); String time = getCurrentTime(); String sendMessage = time+" 我对:"+(ip.equals("255.255.255.255")?"所有人":ip)+"说:\r\n "+message+"\r\n\r\n"; viewText.append(sendMessage); //将发送的消息写入文件 writer.write(sendMessage); sendText.setText(""); } private void send(byte[] bytes, String ip) throws IOException { DatagramPacket packet = new DatagramPacket (bytes,bytes.length,InetAddress.getByName(ip),9999); socket.send(packet); } private String getCurrentTime() { Date date = new Date(System.currentTimeMillis()); SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss"); return format.format(date); } //接收消息的线程 private class Receive extends Thread{ @Override public void run() { super.run(); try { DatagramSocket socket = new DatagramSocket(9999); DatagramPacket packet = new DatagramPacket(new byte[8192], 8192); while(true){ socket.receive(packet); byte[]arr = packet.getData(); int len = packet.getLength(); if (arr[0] == -1 && len == 1) { shake(); continue; } String message = new String(arr,0,len); String time = getCurrentTime(); String ip = packet.getAddress().getHostAddress(); String receivedMessage = time+" "+ip+"对我说:\r\n"+message+"\r\n"; viewText.append(receivedMessage); //写入收到的消息 writer.write(receivedMessage); } } catch (Exception e) { } } } public static void main(String[] args) { new GUIChat_UDP(); } }

优秀的个人博客,低调大师

RedisFX v2.3.21 已经发布,使用 JavaFX 开发的 Redis GUI 工具

RedisFX v2.3.21已经发布,基于JavaFX开发的Redis可视化工具。 此版本更新内容包括: 1.修复管道执行时数据库选择问题 2.调整页面节点加载逻辑以解决缩放问题 由于gitee附件大小限制,只保留最新版本,需要下载其它版本的小伙伴,请去https://github.com/tanhuang2016/RedisFX/releases 特性 ✅ SSH、SSL/TLS 协议支持 ✅ Cluster、Sentinel 模式支持 ✅ String、List、Hash、Set、Zset、JSON、Stream 类型支持 ✅ 控制台、命令监控、发布订阅、信息报表 ✅ 多主题、多语言、其他个性化配置 ✅ 支持Windows(x86)、Linux(x86和arm)、MacOS(x86和arm) 还存在的问题 ⚠️ 内存占用偏大(Windows和Linux已采用ZGC使内存降低三分之一) ⚠️ 部分交互功能使用UI线程导致响应缓慢 ⚠️ 其他用户体验优化... 规划 ⬜ ⭐⭐⭐ 代码重构、体验优化、提升性能 ⬜ ⭐⭐⭐ 交互优化、惰性加载设计 ⬜ ⭐⭐ 构建跨平台执行包完善、支持GraalVM原生镜像打包 ⬜ ⭐⭐ 操作细节优化、完善现有功能设计 ⬜ ⭐ 更多的个性化配置支持 ⬜ ⭐ 为键值解析提供自定义插件扩展能力 开发环境 v1.x使用JDK1.8原生JavaFX开发(已封版) v2.x使用JDK21基于v1.x开发,提供了漂亮的UI库且功能更完善(持续更新中) 功能效果图展示 详情查看:https://gitee.com/tanhuang2016/RedisFX/releases/v2.3.21

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册