首页 文章 精选 留言 我的

精选列表

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

数据库 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

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

Podman Desktop 1.8 发布,带来自己的 K8s GUI

Podman Desktop 1.8 已经发布,此版本带来: Podman 4.9.3:Podman 4.9.3现在包含在 Windows 和 Mac 安装程序中。 Kubernetes Explorer:用于使用 Kubernetes 集群的高级 UI 和新工具。 Global Onboarding:通过一组指导工作流程,轻松配置和设置您的环境。 学习中心:为开发人员发现新的用例和功能。 扩展 API 改进:扩展 API 的另一项重大更新,为 🦭 Podman Desktop 的扩展带来更多好处。 增强的构建、Pod 列表和故障排除页面:针对不同平台进行构建、升级的 Pod 视图等。 Podman4.9.3 🦭 Podman 4.9.3 包括针对我们用户报告的稳定性和可靠性问题的关键修复 - 特别是如果您使用 Apple 芯片架构。如果您一直在苦苦挣扎,我们强烈建议您更新! Kubernetes资源管理器 在过去的版本中作为实验性功能逐步引入,我们已准备好扩展我们的功能以帮助开发人员从容器过渡到 Kubernetes。在此版本中,我们引入了一组新功能,使开发人员能够使用更多 Kubernetes 资源,从而对应用程序提供更精细和交互式的控制。 现在,🦭 Podman Desktop 中提供了一个新的 Kubernetes Explorer,除了对 Pod 的现有支持之外,它还能够使用部署、服务、入口和路由。对于每个资源,Podman Desktop 提供有关集群上资源状态的实时信息。在此概述页面的右上角,您还可以单击应用 YAML 在集群上创建或更新资源(类似于“kubectl apply -f”),并查看当前连接状态。 就像本地容器或映像一样,您可以单击“摘要”、“检查”和 Kube (YAML) 页面上的更多详细信息。 看到问题了吗?您可以直接从 Kube 选项卡编辑和应用更改。 🦭 Podman Desktop 继续弥合差距和差异,使使用容器的开发人员能够通过高效的工作流程从本地工作站瞄准 Kubernetes。这是除了一些已经可用的强大功能之外的所有功能: Podman 的原生 Kubernetes 支持 Podify - 将容器转换为 Pod 使用 Minikube 和 Kind 扩展设置本地 Kubernetes 环境 部署到 Kubernetes 并将本地映像从 Podman 推送到 Kubernetes 环境 管理 Kubernetes 上下文 连接到远程 Kubernetes 集群 扩展 API改进 我们继续花费大量时间添加新的扩展 API,为即将推出的扩展提供更多功能,甚至更好地集成到 🦭 Podman Desktop: 拆分 getMatchingPodmanEngine#6160 创建容器时添加 HealthCheck 参数#5981 将 listPods 暴露给扩展#5864 createPod 的标签#5862 允许在 Pod 中创建容器#5848 OpenPod 应重定向到 pod 的视图#5846 增强 createContainer API 缺少参数的情况#6011 允许扩展使用 openDialog/saveDialog#6009 允许在贡献的操作中自定义图标#5995 添加缺失的类型#6213 允许从扩展导航到特定的 Web 视图#5899 将 stopPod 和 removePod 暴露给扩展#5898 使用新的 API 打开/保存对话框#6051、#6050、#6049 扩展 Podman Desktop API 构建映像参数#5882 允许扩展至统计容器#6211 其他值得注意的增强功能 我们在此版本中添加了 40 多项功能,以下是其他一些亮点: 改进 Podman Desktop 更新警报#6068 在故障排除中添加收集和下载日志按钮#5119 为 Linux 启用 podman 机器#5902 多次删除动画#5717 图像删除动画#5709 卷删除动画#5707 打开 OpenShift 路线#5560 添加打开创建的 Pod 详细信息#4499 部署到 kubernetes 集群时使用 https#5824 仪表板页面上的入门轮播#5142 删除对象时添加确认对话框#5445 我们在实施light模式方面也取得了一些重大进展: 使用主题颜色反转内容#6029 使用辅助导航的主题颜色#6028 为全球导航应用主题颜色#6027 为标题栏应用主题颜色#6025 一致的关闭按钮#6060 在快速选择中使用组件#6057 为 webview 提供 css 颜色#5963 将颜色发布到应用程序的样式#5962 允许扩展提供带有一组颜色的主题#5961 商店颜色#5960 包括颜色注册表#5958 添加实用方法来获取主题的值#5947 当操作系统更改颜色时发送事件#5946 清理深色:前缀颜色#5944 将调色板提取到自己的文件中#5931 输入组件#5904 输入错误,在运行图像中使用输入组件#5988 构建图像时使用输入#5986 使用代理设置输入#5943 使用注册表输入#5939 从容器创建 pod 时使用输入#5935 在扩展页面中使用输入组件#5934 在创建卷中使用输入#5933 重命名图像时使用输入#5964 在部署到 kube 时使用复选框组件#6030 值得注意的错误修复 我们在此版本中修复了许多错误,包括以下内容: 将容器复制到 pod 时安装的复制卷#5640 更改卷和容器列表中“创建”按钮的顺序#6092 上下文值更新时刷新入门项目 (#4597)#6173 更好地登录 informer 连接错误#6158 网站:替换损坏的链接#6111 中心空屏幕#6077 不要求确认打开本地文件夹/文件#5743 强制面包屑垂直对齐#5741 身份验证页面中的长用户名#5737 用于更新任务名称的消息属性#5731 导航项 UI 修复#5886 显示回注册表的图标#5843 检查路由 tls 以使用 http 或 https#5825 白色工具提示#5887 限制注册表用户名列宽度#5718 删除 Linux 上的 docker 兼容性警告和按钮#5903 容器的图像使用情况#5663 删除当前上下文时应更改/更新#5819 不要折叠侧边栏上的类别#5727 使 localhost 成为 env.openExternal 调用的有效域#5716 文档 随着新版本的 🦭 Podman Desktop 的发布,文档也进行了以下改进: containerEngine api 的容器和图像相关方法#5891 删除了使用 openshift local 安装 podman#6070 文档图像检查器提供程序 API#5813 添加 withProgress api 文档#5736 添加了故障排除页面的链接#5734 macOS M1/M2/M3 上的安装故障排除#5708 卷删除#5707 添加了从另一个 WSL 实例访问 Podman(配置、验证)#5706 使用 typedoc 生成 api 文档#5705 下载:https://podman-desktop.io/downloads

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册