问题:
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 {
@Override
public void itemStateChanged(ItemEvent e) {
setToolTipText(getToolTipText4Display(getSelectedItem()));
}
} }

Swing开发界面时的一个bug复盘的更多相关文章

  1. [android开发IDE]adt-bundle-windows-x86的一个bug:无法解析.rs文件--------rs_core.rsh file not found

    google的android自带的apps写的是相当牛逼的,将其导入到eclipse中方便我们学习扩展.可惜关于导入的资料太少了,尤其是4.1之后的gallery和camera合二为一了.之前导4.0 ...

  2. 【Qt】无边框窗体中带有ActiveX组件时的一个BUG

    无意中发现的一个BUG,Qt5.1.1正式版首先创建一个GUI工程,拖入一个QAxWidget控件(为了使ActiveX生效,需要在.pro文件中加入CONFIG += qaxcontainer)接着 ...

  3. ADO.NET(OleDb)读取Excel表格时的一个BUG

    如果我们有例如以下一个Excel表格:    如今要使用C#程序读取其内容: using System;  using System.Data.OleDb;    namespace Skyiv.Be ...

  4. java中的swing设计界面时怎么加上背景图片。而不覆盖其他控件?

    通过以下方式设置下背景就可以了: import java.awt.Container; import javax.swing.ImageIcon; import javax.swing.JFrame; ...

  5. echarts折线图动态改变数据时的一个bug

    echarts折线图中当增加dataZoom,修改start大于0的时候,会出现折线混乱,变成竖直的线,绘制有问题. 解决方法,在dataZoom中增加filterMode: 'empty' http ...

  6. 开发ArcEngine时的一个提示,无效位图,无法在类“***”中找到资源“***.bmp”

    解决办法:文件属性-生成操作 修改为 :嵌入式资源.

  7. VS开发ArcEngine时的一个异常信息——“ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS components.”

    问题描述:程序报错“ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS ...

  8. Swing开发图形界面有如下优势

    Swing开发图形界面有如下优势 : Swing组件不再依赖于本地平台的GUI,无须采用各种平台的GUI交集,因此Swing提供了大量图形界面组件,远远超出了AWT所提供的图形界面组件集. Swing ...

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

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

随机推荐

  1. ORACLE 实验二

    实验二:数据操纵 实验学时:4学时 实验类型:综合型 实验要求:必修 一.实验目的 1.掌握SQL数据查询语句: 2.掌握SQL聚集函数的使用. 3.掌握SQL插入.改动.删除语句的使用. 二.实验内 ...

  2. httpcomponents-client-4.3.x DOC

    Chapter 1. Fundamentals Prev     Next Chapter 1. Fundamentals 1.1. Request execution The most essent ...

  3. 我的Android进阶之旅------>经典的大牛博客推荐(排名不分先后)!!

    本文来自:http://blog.csdn.net/ouyang_peng/article/details/11358405 今天看到一篇文章,收藏了很多大牛的博客,在这里分享一下 谦虚的天下 柳志超 ...

  4. Git在下搭建下环境的工具

    (本文稿来自:http://www.open-open.com/news/view/55387) Git是一个快速,可扩展的,分布式的版本控制系统.Git服务器起初是专为Linux开发,后来移植至Wi ...

  5. 一个带动画的页面底部的TabBar的实现

    有时有这样一个需求,页面底部有几个图标能够点击,假设一个screenWidth显示不下这些图标,则这一列图标最后一个是more,点击more,能够通过动画展示两列图标 这样来增加layout中: &l ...

  6. Visual Studio跨平台开发实战(1) - Hello Xamarin!

    原文 Visual Studio跨平台开发实战(1) - Hello Xamarin! 前言 应用程式发展的脚步, 从来没有停过. 从早期的Windows 应用程式, 到网路时代的web 应用程式, ...

  7. windows phone (22) 隐藏元素

    原文:windows phone (22) 隐藏元素 在wp中我们也会用到隐藏某个元素,已达到某种效果,刚刚从文章看到了,分享一下[作者:神舟龙] Visibility 此属性能非常方便的实现隐藏某个 ...

  8. WPF DataGrid_SelectChanged获取单元内容

    private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)        {          ...

  9. Composite Design Pattern 设计模式组合

    设计模式组合,它能够更类组合在一类,形成一个树状结构. #include <set> #include <iostream> #include <string> u ...

  10. Java实现BASE64编解码器

    Java实现BASE64编解码器 笔者:chszs,转载注明.博客首页:http://blog.csdn.net/chszs BASE64和其它类似的编码算法通经常使用于转换二进制数据为文本数据,其目 ...