问题:
QA突然发个截图说一个Dialog上展示的东西变形了

分析:
不理解,什么也没做,怎么会变形,刚刚我用的时候还正常。
看看代码,的确什么也没更改;
在本地测一下,也没有问题;
baidu,bing,stackoverflow下,没找到什么线索

突然看到一个ComboBox下面有一个item的值比较长,

布局使用的是GridBagLayout,也就是相对布局,如果设置Size是固定的,如果有一个控件变大,则整体的布局变形了

因此这个Combobox item的值比较长解决了,这个问题就解决了。

解决的思路:
如果JComboBox列表中的内容过长的话,下拉框中不全部显示
解决方法一:当鼠标放在这个过长的项目中时显示tooltip,提示用户选择这项的全部信息
解决方法二:获取最大长项目宽度,并设置为弹出下拉框时的宽度
http://blog.chinaunix.net/uid-12888785-id-2384254.html

最终采用的是方法一,重写JcomboBox,里面存在两个Map,map1<model-element,displayName>,map2<model-element,displayName4ToolTextTip>
分为三种数据:Model,displayName,toolTextTip

复盘:
如果出现bug,找问题原因要了解场景,出bug时要了解问题前和问题后的差异,
有差异时,就找是否由差异引起的,
没有差异时,就确定是否是隐藏的bug:由于某些值超过Threshold,要查看出bug前的值和bug后的值有什么不同,缩小查找bug的范围

(1)更改引起bug
(2)某些值的改变引起bug

重写的JComboBox:

import java.awt.Color;
import java.awt.Component;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JList;public class JComboBox4ItemWidth extends JComboBox {private static final long serialVersionUID = 1L;private Map<String, String> antFactory_value_displayName4toolTipText;private Map<String, String> antFactory_value_displayName4dispaly = new HashMap<String, String>();public JComboBox4ItemWidth() {this.setRenderer(new ListCellRendererImpl());this.addItemListener(new ItemListenerImpl());this.setBackground(Color.WHITE);}public void setModelData(Object antFactory_value_displayName) {this.antFactory_value_displayName4toolTipText = (Map<String, String>) antFactory_value_displayName;Set<Entry<String, String>> antFactorys = this.antFactory_value_displayName4toolTipText.entrySet();DefaultComboBoxModel model = new DefaultComboBoxModel();for (Entry<String, String> antFactory : antFactorys) {antFactory_value_displayName4dispaly.put(antFactory.getKey(), format(antFactory.getValue()));model.addElement(antFactory.getKey());}this.setModel(model);}private String format(String displayValue) {if (displayValue.length() > 9) {displayValue = displayValue.substring(0, 6) + "...";}return displayValue;}public void setMoValue(Object value) {if (value != null && value.toString().trim().length() > 0) {this.setSelectedItem(value.toString());this.setToolTipText(getToolTipText4Display(value));} else {this.setSelectedIndex(-1); // 若从服务端得到的值是空,则界面显示空this.setToolTipText("");}}public Object getMoValue() {Object value = this.getSelectedItem();if (value != null && value.toString().trim().length() == 0) {value = "";}return value;}public String getDisplayValue(Object antFacotryValue) {String displayValue = this.antFactory_value_displayName4dispaly.get((String) antFacotryValue);return displayValue == null ? " " : displayValue;// 为空是需要空格,下拉选项才可显示出空值选项
    }public String getToolTipText4Display(Object antFacotryValue) {String displayValue = this.antFactory_value_displayName4toolTipText.get(antFacotryValue.toString());return displayValue == null ? " " : displayValue;// 为空是需要空格,下拉选项才可显示出空值选项
    }class ListCellRendererImpl extends DefaultListCellRenderer {private static final long serialVersionUID = -6671159080681655776L;public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {String display = getDisplayValue(value);JComponent comp = (JComponent) super.getListCellRendererComponent(list, display, index, isSelected, cellHasFocus);comp.setToolTipText(getToolTipText4Display(value));return comp;}}class ItemListenerImpl implements ItemListener {@Overridepublic void itemStateChanged(ItemEvent e) {setToolTipText(getToolTipText4Display(getSelectedItem()));}}}

Swing开发界面时的一个bug复盘相关推荐

  1. 开发iWatch时遇到的bug,可能是因为项目名中含有中文

    开发iWatch时遇到的问题,可能是因为项目名中含有中文,我把项目名改成中文了后就没问题了

  2. 测试工作中发现一个bug,而开发人员说不是一个bug,你该怎么处理?

    说法一: 1.首先明确开发说不是bug的理由. 2.如果是需求变更, 那就找产品经理确认是否是需求变更. 3.如果开发说测试环境问题, 让他说明清楚测试环境问题是什么,按照他说的验证一遍, 如果确实如 ...

  3. springboot启动时的一个bug

    项目启动就有这个错 Error creating bean with name 'XXXXXXXX': Cannot create inner bean '(inner bean)#1f930774' ...

  4. 一个BUG导致3000万损失!涉及资金交易的功能该如何做好测试和项目管理

    一.前言 最近朋友公司发生了一个非常严重的事情,在对接公司客户的充值接口时,一个BUG导致了3000万左右的资金入错帐! 当听说这个事情的时候,我第一反应可能是前端的充值按钮以及充值接口未做防重复提交 ...

  5. 1 为发现 php,magento 1.8.1中发现sitemap模块的一个bug

    magento的sitemap模块是magento给商品分类和商品构建一个类似地图索引的功能,一来是为了方便用户定位到商品,更直接的目的应该是服务于SEO.不过我在magento 1.8.1版本中使用 ...

  6. java怎么开发图形界面_Java Swing 图形界面开发简介

    1. Swing简介 Swing 是 Java 为图形界面应用开发提供的一组工具包,是 Java 基础类的一部分. Swing 包含了构建图形界面(GUI)的各种组件,如: 窗口.标签.按钮.文本框等 ...

  7. swing开发图形界面工具配置(可自由拖控件上去)

    swing开发图形界面工具,eclipse swing图形化操作界面工具配置 1.有一个小功能要有一个界面,之前知道有一个 图形化界面的(就是可以往上面拖控件布局的工具)JBuilder,今天上午就下 ...

  8. java swing图形界面开发 java.swing简介

    最近在看YouTube上面的视频的时候,虽然学着做了一点界面和一点可以运行的东西,但是里面用到的库文件我还是不明就里的.所以我打算在制作游戏之前,先花几天的时间大概地研究一下关于java.swing的 ...

  9. linux中终端字符界面打印QQ,教你如何在开发驱动时在图形界面下的终端打印字符!!...

    我们平时在图形界面下开一个终端(xterm),然后在程序里面开发程序时,用printk()打印一些我们需要打印的信息,但是这些信息不能在当前终端下面显示出来,只能通过dmesg才能查看,很麻烦,这两天 ...

最新文章

  1. putty改oracle数据库密码,用putty远程访问虚拟机linux系统Oracle数据库。
  2. mybatis源码学习(三):MappedStatement的解析过程
  3. 使用Oracle WebLogic创建部署计划
  4. antd table排序会触发到分页怎么解决_多年管理系统开发经验总结~代码解决方案...
  5. 二道Const,readonly 和 override, new的面试题
  6. android 模仿微信布局,【Android初学者】框架布局:仿微信页面制作
  7. 联合国启动有史以来最大规模全球对话,腾讯会议、企业微信全程支持
  8. OpenCASCADE Texture Mapping
  9. 第七章读书笔记《深入理解计算机系统》
  10. sublimetext能编辑html语言,SublimeText_编辑保存的Html乱码问题解决
  11. (转) java 通过 jdbc 链接 ms sql server 中出现 no suitable driver for ...
  12. Linux安装phpstudy
  13. 【C#】Activator.CreateInstance用法
  14. 【Linux-Minio】安装部署文档(含单节点多盘、多节点多盘【TLS+Nginx负载均衡】、省市代码)
  15. Migration——迁移
  16. 路飞学城结算中心实现
  17. 【日常折腾】Y7000P触控板失灵这件事
  18. Golang并发编程入门教程
  19. lol的不只有英雄联盟,还有程序开发天团!
  20. 快捷下载中国原创音乐基地音乐(包括金豆和无法下载音乐)

热门文章

  1. ITK:计算两个3D点之间的距离
  2. Qt Creator创建UI
  3. OpenGL Texture Coordinates纹理坐标的实例
  4. OpenGL Gamma校正 (Gamma Correction)
  5. C语言通过用户输入将八进制转为二进制(附完整源码)
  6. 经典C语言程序100例之四
  7. C语言与C++优缺点
  8. 13.5.虚拟化工具--jhat详解、13.6.虚拟化工具--jstack详解
  9. jquery sortable的拖动方法内容说明和示例详解(转载http://www.jb51.net/article/45803.htm)
  10. 修改Oracle数据库的连接数