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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

發布時間:2024/9/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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复盘的全部內容,希望文章能夠幫你解決所遇到的問題。

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