日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Swing开发界面时的一个bug复盘

發布時間:2024/9/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Swing开发界面时的一个bug复盘 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

問題:
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复盘的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 全黄一级裸片视频 | 亚洲精品成人片在线观看精品字幕 | 黄色国产在线 | 久久久久久国产精品视频 | bt男人天堂| 色在线免费| 天天干网| 美女脱了内裤喂我喝尿视频 | 成人性生交大全免 | 2025韩国大尺度电影 | 成人精品在线看 | 色婷婷久久综合中文久久蜜桃av | 中文人妻熟女乱又乱精品 | 一区二区三区亚洲视频 | 天天躁日日躁狠狠很躁 | 欧洲一区二区 | 亚洲精品视频二区 | 欧美爱爱小视频 | 亚洲成人av电影网站 | 久久精精品久久久久噜噜 | 黄色一区二区三区四区 | 香蕉视频成人在线 | 九九精品在线视频 | 亚洲精品中文字幕乱码无线 | 播色网| 人妻换人妻a片爽麻豆 | 亚洲乱码日产精品bd在线观看 | 久久久久亚洲av无码麻豆 | 女的高潮流时喷水图片大全 | 国产成人无码精品久久 | 亚洲人在线视频 | 亚洲国产欧美一区二区三区深喉 | 欧美高清久久 | 在线免费观看污视频 | 亚洲精品久久视频 | 久久久青青草 | 亚洲乱码精品久久久久.. | 国产精品偷乱一区二区三区 | 91精品国产福利在线观看 | 欧美成人怡红院 | 日韩黄色网 | 国产麻豆午夜三级精品 | 亚洲精品国产精 | 日本草草影院 | 欧美日韩电影一区二区 | 亚洲aaaa级特黄毛片 | 在线观看国产成人 | 91理论片| 四虎成人精品在永久免费 | 在线高清免费观看 | 亚洲色婷婷一区二区三区 | 国产91白丝在一线播放 | 国产精品--色哟哟 | 午夜视频福利在线 | 欧美精品一区二区久久婷婷 | av天天射 | 草久久久久久 | 久久一级黄色片 | 国产视频久久久久久 | 亚洲精品字幕在线观看 | 中日韩黄色大片 | 中文字幕23 | 男女一级特黄 | 精品日本一区二区三区在线观看 | 日韩精品一二三四区 | 在线视频欧美一区 | 亚洲精品女 | 国产又大又硬又粗 | 久久久久久成人 | 欧美国产黄色 | a∨色狠狠一区二区三区 | 超碰在线98 | 国产福利精品在线观看 | 欧美一级一级 | 午夜精品一区二 | 日本一区二区高清视频 | 欧美脚交 | 操人视频免费 | 91免费播放 | 精人妻无码一区二区三区 | av天天色 | 一边吃奶一边摸做爽视频 | 久久久久久久久久99精品 | 大学生一级片 | 久久亚洲精品视频 | 成人区人妻精品一区二区网站 | 国产99久久 | 九九视频在线免费观看 | 成人高清在线观看 | 久草网址| 精品一区二区视频在线观看 | 日本视频www | 久久成人a | 操操网站 | 成人综合婷婷国产精品久久 | 无码人妻h动漫 | 国产做受麻豆动漫 | 9久久精品| 69影院少妇在线观看 |