マップセットは、この例で必要なデータ構造に非常に適しているキー価値マッピング関係を保存できますマップセットを使用して、州の情報を選択するときに、地方および市のカスケード選択ボックスが都市ドロップダウン選択ボックスのコンテンツを変更します。
アイデア分析:
1.国家(州、自治体、自律領域)マッピングセット、つまりLinkedhashmapオブジェクトを使用して、特定の州と都市の間のマッピング関係をコレクションに追加します。値は、文字列タイプの1次元配列です。
コードは次のとおりです。
citymap.java
コードコピーは次のとおりです。
java.util.linkedhashmapをインポートします。
java.util.mapをインポートします。
パブリッククラスシティマップ{
/**
*国立(州、自治体、自治区)マッピングコレクション
*/
public static Map <string、string []> model = new linkedhashmap <string、string []>();
静的{
model.put( "beijing"、new String [] {"Beijing"});
Model.put( "Shanghai"、new String [] {"Shanghai"});
model.put( "Tianjin"、new String [] {"Tianjin"});
model.put( "chongqing"、new String [] {"Chongqing"});
model.put( "heilongjiang"、new String [] {"harbin"、 "qiqihar"、 "mudanjiang"、 "daqing"、 "yichun"、 "shuangyashan"、 "hegang"、 "jixi"、 "jiamusi"、 "" Qitaihe "、" heihe "、" suihua "、" daxinganling "});
Model.put( "Jilin"、new String [] {"changchun"、 "yanbian"、 "jilin"、 "baishan"、 "baicheng"、 "siping"、 "songyuan"、 "liaoyuan"、 "da'an" 、 "Tonghua"});
model.put( "liaoning"、new String [] {"Shenyang"、 "dalian"、 "Huludao"、 "lushun"、 "benxi"、 "fushun"、 "tieling"、 "liaoyang"、 "yingkou"、 " fuxin "、" chaoyang "、" jinzhou "、" dandong "、" anshan "});
Model.put( "Inner Mongolia"、new String [] {"Hohhot"、 "Hulunbuir"、 "xilinhot"、 "baotou"、 "chipong"、 "hailar"、 "wuhai"、 "ordos"、 "tongliao"} );
model.put( "hebei"、new String [] {"Shijiazhuang"、 "Tangshan"、 "Zhangjiakou"、 "Langfang"、 "xingtai"、 "Handan"、 "Cangzhou"、 "Hengshui"、 "Chengde"、 " baoding "、" qinhuangdao "});
Model.put( "Henan"、new String [] {"Zhengzhou"、 "kaifeng"、 "luoyang"、 "pingdingshan"、 "jiaozuo"、 "hebi"、 "xinxiang"、 "anyang"、 "puyang"、 " Xuchang "、" luohe "、" sanmenxia "、" nanyang "、" shangqiu "、" xinyang "、" zhoukou "、" Zhumadian "});
Model.put( "Shandong"、new String [] {"jinan"、 "qingdao"、 "zibo"、 "weihai"、 "qufu"、 "linyi"、 "yantai"、 "zaozhuang"、 "liaocheng"、 " jining "、" heze "、" tai'an "、" rizhao "、" dongying "、" dezhou "、" binzhou "、" laiwu "、" weifang "});
model.put( "shanxi"、new String [] {"Taiyuan"、 "yangquan"、 "jincheng"、 "jinzhong"、 "linfen"、 "yuncheng"、 "changzhi"、 "shuozhou"、 "xinzhou"、 "" datong "、" luliang "});
model.put( "jiangsu"、new String [] {"nanjing"、 "suzhou"、 "kunshan"、 "nantong"、 "taicang"、 "wuxian"、 "xuzhou"、 "yixing"、 "zhenjiang"、 " Huaian "、" changshu "、" yancheng "、" taizhou "、" wuxi "、" lianyungang "、" Yangzhou "、" changzhou "、" suqian "});
model.put( "anhui"、new String [] {"hefei"、 "chaohu"、 "bengbu"、 "anqing"、 "lu'an"、 "chuzhou"、 "ma'anshan"、 "fuyang"、 " Xuancheng "、" Tongling "、" Huaibei "、" wuhu "、" haozhou "、" suzhou "、" huainan "、" chizhou "});
model.put( "shaanxi"、new String [] {"xi'an"、 "hancheng"、 "ankang"、 "hanzhong"、 "baoji"、 "xianyang"、 "yulin"、 "weinan"、 "shangluo" 、「Tongchuan」、「Yan'an」});
model.put( "ningxia"、new String [] {"yinchuan"、 "guyuan"、 "zhongwei"、 "shizuisuan"、 "wuzhong"});
model.put( "gansu"、new String [] {"lanzhou"、 "baiyin"、 "qingyang"、 "jiuquan"、 "tianshui"、 "wuwei"、 "zhangye"、 "gannan"、 "linxia"、 " Pingliang "、" dingxi "、" jinchang "});
model.put( "Qinghai"、new String [] {"Xining"、 "haibei"、 "haixi"、 "Huangnan"、 "Goluo"、 "Yushu"、 "haidong"、 "hainan"});
model.put( "hubei"、new String [] {"wuhan"、 "yichang"、 "huanggang"、 "enshi"、 "jingzhou"、 "shennongjia"、 "shiyan"、 "xianning"、 "xiangfan"、 " Xiaogan "、" suizhou "、" huangshi "、" jingmen "、" ezhou "});
Model.put( "Hunan"、new String [] {"changsha"、 "shaoyang"、 "changde"、 "chenzhou"、 "jishou"、 "Zhuzhou"、 "loudi"、 "xiangtan"、 "yiyang"、 " Yongzhou "、" Yueyang "、" Hengyang "、" Huaihua "、" Shaoshan "、" Zhangjiajie "});
Model.put( "Zhejiang"、new String [] {"Hangzhou"、 "Huzhou"、 "jinhua"、 "ningbo"、 "lishui"、 "shaoxing"、 "yandangshan"、 "quzhou"、 "jiaxing"、 "" Taizhou "、" Zhoushan "、" wenzhou "});
model.put( "jiangxi"、new String [] {"nanchang"、 "pingxiang"、 "jiujiang"、 "shangrao"、 "fuzhou"、 "ji'an"、 "yingtan"、 "yichun"、 "xininu" 、「Jingdezhen」、「Ganzhou」});
Model.put( "Fujian"、new String [] {"fuzhou"、 "xiamen"、 "longyan"、 "nanping"、 "ningde"、 "putian"、 "quanzhou"、 "sanming"、 "Zhangzhou})) ;
model.put( "guizhou"、new String [] {"guiyang"、 "anshun"、 "chishui"、 "zunyi"、 "tongren"、 "liupanshui"、 "bijie"、 "kaili"、 "duyun")) ;
model.put( "sichuan"、new String [] {"chengdu"、 "luzhou"、 "neijiang"、 "liangshan"、 "aba"、 "bazhong"、 "guangyuan"、 "leshan"、 "mianyang"、 " Deyang "、" Panzhihua "、" ya'an "、" yibin "、" zigong "、" ganzizhou "、" dazhou "、" ziyang "、" guang'an "、" suining "、" meishan "、" nanchongong " });
Model.put( "Guangdong"、new String [] {"Guangzhou"、 "Shenzhen"、 "Chaozhou"、 "Shaoguan"、 "Zhanjiang"、 "Huizhou"、 "Qingyuan"、 "Dongguan"、 "Jiangmen"、 " Maoming "、" zhaoqing "、" shanwei "、" heyuan "、" jieyang "、" meizhou "、" Zhongsan "、" deqing "、" Yangjiang "、" Yunfu "、" Zhuhai "、" Shantou "、" Foshan " });
model.put( "guangxi"、new String [] {"nanning"、 "guilin"、 "Yangshuo"、 "liuzhou"、 "wuzhou"、 "Yulin"、 "Giiling"、 "hezhou"、 "Qinzhou"、 " Guigang "、" fangchenggang "、" baise "、" beihai "、" hechi "、" laibin "、" chongzuo "});
Model.put( "Yunnan"、new String [] {"Kunming"、 "baoshan"、 "chuxiong"、 "dehong"、 "Honghe"、 "lincang"、 "nujiang"、 "qujing"、 "Simao"、 " wenshan "、" yuxi "、" zhaotong "、" lijiang "、" dali "});
model.put( "hainan"、new String [] {"haikou"、 "sanya"、 "danzhou"、 "qiongshan"、 "tongshi"、 "wenchang"});
Model.put( "Xinjiang"、new String [] {"Urumqi"、 "Altay"、 "aksu"、 "changi"、 "hami"、 "hotan"、 "kashgar"、 "karamay"、 "shihezi"、 " Tacheng "、" Korla "、" Turpan "、" yining "});
}
}
2。州を取得する方法を定義し、マップコレクションを作成し、前のステップで取得したマップコレクションを割り当て、マップコレクションのkeyset()メソッドを使用して、コレクション、つまり、州のコレクションは、オブジェクトタイプの1次元配列を作成し、セットインターフェイスのToArray()メソッドを使用してセットコレクションを配列に変換し、この配列を州の選択ドロップのパラメーターとして返します - ダウンリスト。
3. jcomboboxクラスのsetModel()メソッドを使用して、州情報を州のドロップダウンリストに追加すると、パラメーターは前のステップで州を取得する方法です。
4.州に従って都市/郡を取得する方法を定義し、マップコレクションを作成し、ステップ1で取得したマップコレクションを割り当て、マップコレクションのget()メソッドを使用して、指定されたキーの値を取得する、つまり、City/County Collectionを作成します。
5。このイベントのオプションステータス変更イベントは、jcomboboxクラスのgetSelectedItem()メソッドを介して取得しますJComboboxクラスのメソッド()は、都市/郡のリストをクリアし、選択した州に従って都市/郡配列を取得し、最後にjcomboboxのsetmodel()メソッドを使用して、都市/郡の価値を再び添加します。リスト。
コードは次のとおりです。
BackgroundPanel.java
コードコピーは次のとおりです。
java.awt.graphicsをインポートします。
java.awt.imageをインポートします。
javax.swing.jpanelをインポートします。
/**
*背景付きのパネルアセンブリ
*
* @author Zhongwei Lee
*/
パブリッククラスのバックグラウンドパネルはjpanelを拡張します{
/**
*
*/
private static final long serialversionuid = 7758689434195492602l;
/**
*背景画像
*/
プライベート画像画像;
/**
*構築方法
*/
public BackgroundPanel(){
素晴らしい();
セトパック(false);
SetLayout(null);
}
/**
*写真を設定する方法
*/
public void setimage(画像画像){
this.image = image;
}
@オーバーライド
保護されたvoid paintComponent(グラフィックスG){//図面コンポーネントの外観を書き直します
if(image!= null){
int width = getWidth(); //コンポーネントサイズを取得します
int height = getheight();
g.drawimage(画像、0、0、幅、高さ、this); //画像の描画はコンポーネントサイズと同じです
}
Super.PaintComponent(g); // SuperClassメソッドを実行します
}
}
SwingResourceManager.java
コードコピーは次のとおりです。
java.awt.imageをインポートします。
java.awt.toolkitをインポートします。
java.io.bufferedinputStreamをインポートします。
java.io.bytearrayoutputStreamをインポートします。
java.io.fileinputStreamをインポートします。
java.io.ioexceptionをインポートします。
java.io.inputStreamをインポートします。
java.util.hashmapをインポートします。
java.util.iteratorをインポートします。
javax.swing.imageiconをインポートします。
/**
*色、フォント、画像などのリソースを管理するためのユーティリティクラス。
*
*このクラスは、アプリケーションまたはプラグインの一部として自由に配布される場合があります。
* <p>
* Copyright(c)2003-2004、Instantiations、Inc。<br>すべての権利予約
*
* @author scheglov_ke
*/
パブリッククラスSwingResourceManager {
/**
*画像名を画像にマップします
*/
private static hashmap <string、image> m_classimagemap = new Hashmap <String、Image>();
/**
*指定された入力ストリームによってエンコードされた画像を返します
* @paramはInputStream画像データをエンコードする入力ストリームです
* @return画像指定された入力ストリームによってエンコードされた画像
*/
プライベート静的画像getImage(inputstream is){
試す {
bytearrayoutputStream baos = new bytearrayoutputStream();
Byte buf [] = new byte [1024 * 4];
while(true){
int n = is.read(buf);
if(n == -1)
壊す;
baos.write(buf、0、n);
}
baos.close();
return toolkit.getDefaultToolkit()。createImage(baos.tobytearray());
} catch(スロー可能なe){
nullを返します。
}
}
/**
*指定されたクラスに対して指定されたパスのファイルに保存されている画像を返します
* @param clazzクラス画像を見つけるためのクラス
* @param Path String画像ファイルへのパス
* @return画像指定されたパスのファイルに保存されている画像
*/
public static image getImage(class <?> clazz、string path){
string key = clazz.getName() + '|' +
画像画像= m_classimagemap.get(key);
if(image == null){
if((path.length()> 0)&&(path.charat(0)== '/')){
文字列newpath = path.substring(1、path.length());
image = getImage(new BufferedInputStream(clazz.getClassLoader()。getResourceAsStream(newPath)));
} それ以外 {
image = getImage(clazz.getResourceasStream(PATH));
}
m_classimagemap.put(key、image);
}
画像を返します。
}
/**
*指定されたパスのファイルに保存されている画像を返します
* @param Path String画像ファイルへのパス
* @return画像指定されたパスのファイルに保存されている画像
*/
public static image getImage(String Path){
return getImage( "default"、path); // $ non-nls-1 $
}
/**
*指定されたパスのファイルに保存されている画像を返します
* @paramセクション文字列キャッシュのストレージセクション
* @param Path String画像ファイルへのパス
* @return画像指定されたパスのファイルに保存されている画像
*/
public static image getImage(文字列セクション、文字列パス){
文字列キー= '|'
画像画像= m_classimagemap.get(key);
if(image == null){
試す {
fileInputStream fis = new fileInputStream(path);
画像= getImage(fis);
m_classimagemap.put(key、image);
fis.close();
} catch(ioException e){
nullを返します。
}
}
画像を返します。
}
/**
*指定されたセクションでキャッシュされた画像をクリアします
* @paramセクションセクションは明確にします
*/
public static void clearimages(文字列セクション){
for(iterator <string> i = m_classimagemap.keyset()。iterator(); i.hasnext();){
文字列key = i.next();
if(!key.startswith(セクション + '|'))
続く;
画像画像= m_classimagemap.get(key);
image.flush();
I.Remove();
}
}
/**
*指定されたクラスに対して指定されたパスのファイルに保存されているアイコンを返します
* @param clazzクラスアイコンを見つけるためのクラス
* @paramパス文字列アイコンファイルへのパス
* @returnアイコン指定されたパスのファイルに保存されているアイコン
*/
public static imageicon geticon(class <?> clazz、string path){
return geticon(getimage(clazz、path));
}
/**
*指定されたパスのファイルに保存されているアイコンを返します
* @paramパス文字列アイコンファイルへのパス
* @returnアイコン指定されたパスのファイルに保存されているアイコン
*/
public static imageicon geticon(string path){
return geticon( "default"、path);
}
/**
*指定されたパスのファイルに保存されているアイコンを返します
* @paramセクション文字列キャッシュのストレージセクション
* @paramパス文字列アイコンファイルへのパス
* @returnアイコン指定されたパスのファイルに保存されているアイコン
*/
public static imageicon geticon(文字列セクション、文字列パス){
return geticon(getImage(セクション、パス));
}
/**
*指定された画像に基づいてアイコンを返します
* @paramイメージ元の画像
* @return画像に基づいてアイコン
*/
public static imageicon geticon(画像画像){
if(image == null)
nullを返します。
新しいImageCon(画像)を返します。
}
}
mainframe.java
コードコピーは次のとおりです。
java.awt.eventqueueをインポートします。
java.awt.event.itemeventをインポートします。
java.awt.event.itemlistenerをインポートします。
java.util.mapをインポートします。
java.util.setをインポートします。
javax.swing.defaultcomboboxmodelをインポートします。
javax.swing.jbuttonをインポートします。
javax.swing.jcomboboxをインポートします。
javax.swing.jframeをインポートします。
javax.swing.jlabelをインポートします。
javax.swing.jpanelをインポートします。
javax.swing.jtextfieldをインポートします。
javax.swing.swingconstantsをインポートします。
javax.swing.uimanagerをインポートします。
javax.swing.border.titledborderをインポートします。
パブリッククラスのメインフレームはjframeを拡張します{
/**
*
*/
private static final long serialversionuid = -4595347311922711984l;
プライベートJTextField Textfield_3;
プライベートJTextField Textfield_1;
プライベートJComboBox ComboBox_1;
プライベートJTextfield Textfield;
プライベートJComboBox CityComboBox;
プライベートJComboBoxコンボボックス。
/**
*アプリケーションを起動します
*
* @param args
*/
public static void main(string args []){
eventqueue.invokelater(new runnable(){
public void run(){
試す {
uimanager.setlookandfeel( "com.sun.java.swing.plaf.nimbus.nimbuslookandfeel");
メインフレームフレーム= new MainFrame();
frame.setVisible(true);
} catch(例外e){
e.printstacktrace();
}
}
});
}
/**
*フレームを作成します
*/
public mainframe(){
getContentPane()。setLayout(null);
セットバウンド(100、100、518、379);
setDefaultCloseoperation(jframe.exit_on_close);
//デフォルトの都市/郡を取得します
string province =(string)getProvince()[0];
Settitle(「対応する都市と郡を入力して、指定された州/自治体を照会する」);
最終的なBackgroundPanel backgroundPanel = new BackgroundPanel();
BackgroundPanel.setImage(SwingResourceManager.getImage(mainframe.class、 "/images/background.jpg"));
backgroundpanel.setbounds(0、0、510、380);
getContentPane()。add(backgroundpanel);
最終jPanelパネル= new JPanel();
panel.setopaque(false);
panel.setbounds(36、126、438、70);
BackgroundPanel.Add(パネル);
panel.setlayout(null);
panel.setborder(new Titledborder(null、 "Place of Residence"、witterborder.default_justification、withedborder.default_position、null、null));
citycombobox = new jcombobox();
citycombobox.setbounds(245、25、124、27);
panel.add(citycombobox);
citycombobox.setModel(new DefaultComboBoxModel(getCity(州)));
combobox = new jcombobox();
combobox.setbounds(25、25、124、27);
panel.add(combobox);
combobox.additemlistener(new itemlistener(){
public void itemStateChanged(最終itemEvent e){//オプションステータス変更イベント
itemChange();
}
});
combobox.setmodel(new defaultcomboxmodel(getProvince()));
final jlabel label = new Jlabel();
label.settext( "stavince/metropolis");
label.setbounds(155、30、66、18);
panel.add(label);
final jlabel label_1 = new Jlabel();
label_1.settext( "City/County");
label_1.setbounds(375、30、37、18);
panel.add(label_1);
final jlabel label_2 = new Jlabel();
label_2.setbounds(36、43、65、18);
backgroundpanel.add(label_2);
label_2.sethorizontalalignment(swingconstants.right);
label_2.sethorizontaltextposition(SwingConstants.Leading);
label_2.settext( "name:");
textfield = new jtextfield();
textfield.setbounds(113、38、154、28);
backgroundpanel.add(textfield);
final jlabel label_3 = new Jlabel();
label_3.setbounds(36、84、65、18);
backgroundpanel.add(label_3);
label_3.sethorizontalAlignment(swingConstants.right);
label_3.sethorizontaltextposition(swingconstants.leading);
label_3.settext( "gender:");
combobox_1 = new jcombobox();
combobox_1.setbounds(113、81、66、25);
backgroundpanel.add(combobox_1);
combobox_1.setModel(new DefaultComboBoxModel(new String [] {"MALE"、 "Female"}));
final jlabel label_4 = new Jlabel();
label_4.setbounds(36、212、65、18);
backgroundpanel.add(label_4);
label_4.sethorizontalalignment(swingconstants.right);
label_4.sethorizontaltextposition(SwingConstants.Leading);
label_4.settext( "詳細アドレス:");
textfield_1 = new jtextfield();
textfield_1.setbounds(113、208、367、28);
backgroundpanel.add(textfield_1);
final jlabel label_4_1 = new Jlabel();
label_4_1.setbounds(36、252、65、18);
backgroundpanel.add(label_4_1);
label_4_1.sethorizontaltextposition(SwingConstants.Leading);
label_4_1.sethorizontalalignment(swingconstants.right);
label_4_1.settext( "電子メール:");
textfield_3 = new jtextfield();
textfield_3.setbounds(113、248、367、27);
backgroundpanel.add(textfield_3);
final jbutton button = new jbutton();
button.setbounds(159、289、75、28);
BackgroundPanel.Add(ボタン);
button.settext( "save");
final jbutton button_1 = new jbutton();
button_1.setbounds(265、289、75、28);
backgroundpanel.add(button_1);
button_1.settext( "reset");
//
}
/**
*州、自治体、自治区を取得します
*
* @戻る
*/
public Object [] getProvince(){
map <string、string []> map = citymap.model; //州情報を取得してマップに保存します
<string> set = map.keyset();
object [] staen = set.toarray();
地方を返します
}
/**
*指定された州に対応する都市/郡を取得します
*
* @Param SelectProvince
* @戻る
*/
public string [] getCity(String SelectProvince){
map <string、string []> map = citymap.model;
string [] arrcity = map.get(selectprovince); //指定されたキーの値を取得します
arrcityを返します
}
private void itemChange(){
文字列SelectProvince =(string)combobox.getSelectedItem();
citycombox.removeallitems();
string [] arrcity = getCity(SelectProvince);
CityComboBox.SetModel(新しいDefaultComboBoxModel(arrcity));
}
}
効果は写真に示されています: