Set peta dapat menyimpan hubungan pemetaan kunci, yang sangat cocok untuk struktur data yang diperlukan dalam contoh ini. Menggunakan set peta.
Analisis Ide:
1. Buat set pemetaan nasional (provinsi, kotamadya, wilayah otonom), yaitu objek LinkedHashMap. Nilainya adalah array satu dimensi tipe string.
Kodenya adalah sebagai berikut:
CityMap.java
Salinan kode adalah sebagai berikut:
impor java.util.linkedhashmap;
impor java.util.map;
Kelas Publik CityMap {
/**
* Koleksi Pemetaan Nasional (Provinsi, Kotamadya, Wilayah Otonomi)
*/
peta statis public <string, string []> model = new LinkedHashMap <String, String []> ();
statis{
model.put ("beijing", string baru [] {"beijing"});
model.put ("shanghai", string baru [] {"shanghai"});
model.put ("tianjin", string baru [] {"tianjin"});
model.put ("chongqing", string baru [] {"chongqing"});
model.put ("heilongjiang", string baru [] {"harbin", "qiqihar", "Mudanjiang", "Daqing", "Yichun", "Shuangyahan", "Hegang", "Jixi", "Jiamusi", " Qitaihe "," heihe "," suihua "," daxinganling "});
model.put ("jilin", string baru [] {"changchun", "yanbian", "jilin", "baishan", "baicheng", "siping", "songyuan", "liaoyuan", "da'an" , "Tonghua"});
model.put ("liaoning", string baru [] {"shenyang", "dalian", "huludao", "lushun", "benxi", "fushun", "tieling", "liaoyang", "yingkou", " Fuxin "," chaoyang "," jinzhou "," Dandong "," anshan "});
Model.put ("Mongolia Dalam", String Baru [] {"Hohhot", "Hulunbuir", "Xilinhot", "Baotou", "Chipong", "Hesiar", "Wuhai", "Ordos", "Tongliao"} );
model.put ("hebei", string baru [] {"shijiazhuang", "tangshan", "zhangjiakou", "langfang", "xingtai", "handan", "cangzhou", "hengshui", "chengde", " Baoding "," qinhuangdao "});
model.put ("Henan", string baru [] {"Zhengzhou", "Kaifeng", "Luoyang", "Pingdingshan", "Jiaozuo", "Hebi", "Xinxiang", "Anyang", "Puyang", " Xuchang "," Luohe "," Sanmenxia "," Nanyang "," Shangqiu "," Xinyang "," Zhoukou "," Zhumadian "});
model.put ("shandong", string baru [] {"jinan", "qingdao", "zibo", "weihai", "qufu", "linyi", "yantai", "zaozhuang", "liaocheng", " Jining "," heze "," tai'an "," rizhao "," dongying "," dezhou "," binzhou "," laiwu "," weifang "});
model.put ("shanxi", string baru [] {"Taiyuan", "Yangquan", "Jincheng", "Jinzhong", "Linfen", "Yuncheng", "Changzhi", "Shuozhou", "Xinzhou", " Datong "," luliang "});
model.put ("Jiangsu", string baru [] {"Nanjing", "Suzhou", "Kunshan", "Nantong", "Taicang", "Wuxian", "Xuzhou", "Yixing", "Zhenjiang", " Huaian "," Changshu "," Yancheng "," Taizhou "," Wuxi "," Lianyungang "," Yangzhou "," Changzhou "," Suqian "});
model.put ("anhui", string baru [] {"hefei", "chaohu", "bengbu", "anqing", "lu'an", "chuzhou", "ma'anshan", "fuyang", " Xuancheng "," tongling "," huabei "," wuhu "," haozhou "," suzhou "," huainan "," chizhou "});
model.put ("Shaanxi", string baru [] {"xi'an", "Hancheng", "Ankang", "Hanzhong", "Baoji", "Xianyang", "Yulin", "Weinan", "Shangluo" , "Tongchuan", "yan'an"});
model.put ("ningxia", string baru [] {"yinchuan", "guyuan", "zhongwei", "shizuishan", "wuzhong"});
model.put ("gansu", string baru [] {"lanzhou", "baiyin", "qingyang", "jiuquan", "tianshui", "wuwei", "zhangye", "gannan", "linxia", " Pingliang "," dingxi "," jinchang "});
model.put ("qinghai", string baru [] {"xining", "haibei", "haixi", "huangnan", "goluo", "yushu", "haidong", "hainan"});
model.put ("hubei", string baru [] {"wuhan", "yichang", "huanggang", "enshi", "jingzhou", "shennongjia", "shiyan", "xianning", "xiangfan", " Xiaogan "," Suizhou "," Huangshi "," Jingmen "," Ezhou "});
model.put ("hunan", string baru [] {"Changsha", "Shaoyang", "Changde", "Chenzhou", "Jishou", "Zhuzhou", "Loudi", "Xiangtan", "Yiyang", " Yongzhou "," yueyang "," hengyang "," huaihua "," shaoshan "," zhangjajie "});
model.put ("zhejiang", string baru [] {"hangzhou", "huzhou", "jinhua", "ningbo", "lishui", "shaoxing", "yandangshan", "quzhou", "jiaxing", " Taizhou "," Zhoushan "," Wenzhou "});
model.put ("Jiangxi", string baru [] {"nanchang", "pingxiang", "jiujiang", "shangrao", "fuzhou", "ji'an", "yingtan", "yichun", "xinyu" , "Jingdezhen", "ganzhou"});
model.put ("fujian", string baru [] {"fuzhou", "xiamen", "longyan", "nanping", "ningde", "putian", "quanzhou", "sanming", "zhangzhou"})) ;
model.put ("Guizhou", string baru [] {"Guiyang", "Anshun", "Chishui", "Zunyi", "Tongren", "Liupanshui", "Bijie", "Kaili", "Duyun"})) ;
model.put ("Sichuan", string baru [] {"Chengdu", "Luzhou", "Neijiang", "Liangshan", "Aba", "Bazhong", "Guangyuan", "Leshan", "Mianyang", " Deyang "," panzhihua "," ya'an "," yibin "," zigong "," ganzizhou "," dazhou "," ziyang "," guang'an "," suining "," meishan "," nanchong " });
model.put ("Guangdong", string baru [] {"Guangzhou", "Shenzhen", "Chaozhou", "Shaoguan", "Zhanjiang", "Huizhou", "Qingyuan", "Dongguan", "Jiangmen", "" Maoming "," zhaoqing "," shanwei "," heyuan "," jieyang "," meizhou "," zhongshan "," deqing "," yangjiang "," yunfu "," zhuhai "," shantou "," foshan "" });
model.put ("Guangxi", string baru [] {"nanning", "guilin", "yangshuo", "liuzhou", "wuzhou", "yulin", "guiling", "hezhou", "qinzhou", " Guigang "," Fangchenggang "," Baise "," Beihai "," Hechi "," Laibin "," Chongzuo "});
model.put ("yunnan", string baru [] {"Kunming", "Baoshan", "Chuxiong", "Dehong", "Honghe", "Lincang", "Nujiang", "Qujing", "Simao", " Wenshan "," yuxi "," zhaotong "," Lijiang "," dali "});
model.put ("hainan", string baru [] {"haikou", "Sanya", "Danzhou", "qongshan", "tongshi", "wenchang"});
model.put ("xinjiang", string baru [] {"urumqi", "altay", "aksu", "changji", "hami", "hotan", "kashgar", "karamay", "shihezi", " Tacheng "," Korla "," Turpan "," Yining "});
}
}
2. Tentukan metode untuk mendapatkan provinsi, buat koleksi peta, tetapkan koleksi peta yang diperoleh pada langkah sebelumnya, dan gunakan metode Keyset () dari koleksi peta untuk mendapatkan set yang terdiri dari semua objek utama di Koleksi, yaitu, koleksi provinsi, membuat array satu dimensi tipe objek, menggunakan metode toarray () dari antarmuka yang ditetapkan untuk mengubah koleksi yang ditetapkan menjadi array, dan mengembalikan array ini sebagai parameter untuk penurunan pemilihan provinsi provinsi Daftar -down.
3. Gunakan metode setModel () dari kelas JComboBox untuk menambahkan informasi provinsi ke daftar drop-down provinsi, dan parameternya adalah metode untuk mendapatkan provinsi pada langkah sebelumnya.
4. Tentukan metode memperoleh kota/kabupaten sesuai dengan provinsi, buat koleksi peta, tetapkan koleksi peta yang diperoleh pada langkah 1 untuk itu, dan gunakan metode get () dari koleksi peta untuk mendapatkan nilai kunci yang ditentukan , yaitu, Koleksi Kota/Kabupaten.
5. Definisikan Opsi Perubahan Status dari Daftar Drop-Down Provinsi Metode RemoveAllitems () dari Kelas JCombobox untuk membersihkannya. daftar.
Kodenya adalah sebagai berikut:
Latar belakangPanel.java
Salinan kode adalah sebagai berikut:
impor java.awt.graphics;
impor java.awt.image;
impor javax.swing.jpanel;
/**
* Perakitan panel dengan latar belakang
*
* @author zhongwei lee
*/
BackgroundPanel kelas publik memperluas jpanel {
/**
*
*/
SerialVersionuid Long Final Pribadi = 7758689434195492602L;
/**
* Gambar latar belakang
*/
gambar gambar pribadi;
/**
* Metode pembuatan
*/
latar belakang publik () {
super();
setOpaque (false);
setLayout (null);
}
/**
* Cara mengatur gambar
*/
public void setImage (gambar gambar) {
this.image = gambar;
}
@Mengesampingkan
PaintComponent void yang dilindungi (grafik g) {// Tulis ulang penampilan komponen gambar
if (gambar! = null) {
Int Width = getWidth (); // Dapatkan ukuran komponen
int tinggi = getHeight ();
G.DrawImage (gambar, 0, 0, lebar, tinggi, ini); // Menggambar gambar sama dengan ukuran komponen
}
super.paintcomponent (g); // Jalankan metode superclass
}
}
SwingResourcemanager.java
Salinan kode adalah sebagai berikut:
impor java.awt.image;
impor java.awt.toolkit;
impor java.io.bufferedInputStream;
impor java.io.bytearrayoutputStream;
impor java.io.fileInputStream;
impor java.io.ioException;
impor java.io.inputstream;
impor java.util.hashmap;
impor java.util.iterator;
impor javax.swing.imageicon;
/**
* Kelas utilitas untuk mengelola sumber daya seperti warna, font, gambar, dll.
*
* Kelas ini dapat didistribusikan secara bebas sebagai bagian dari aplikasi atau plugin apa pun.
* <p>
* Hak Cipta (C) 2003 - 2004, Instantiations, Inc. <br> Semua hak dilindungi undang -undang
*
* @author scheglov_ke
*/
Kelas Publik SwingResourCeManager {
/**
* Memetakan nama gambar ke gambar
*/
private static hashMap <String, Image> m_classimagemap = new HashMap <String, Image> ();
/**
* Mengembalikan gambar yang dikodekan oleh aliran input yang ditentukan
* @param adalah inputstream aliran input yang mengkode data gambar
* @return gambar gambar yang dikodekan oleh aliran input yang ditentukan
*/
Private Static Image GetImage (InputStream IS) {
mencoba {
BytearrayoutputStream baos = new bytearrayoutputStream ();
byte buf [] = byte baru [1024 * 4];
while (true) {
int n = is.read (buf);
if (n == -1)
merusak;
Baos.write (buf, 0, n);
}
baos.close ();
return toolkit.getDefaultToolKit (). createImage (Baos.tobyTeArray ());
} catch (Throwable e) {
kembali nol;
}
}
/**
* Mengembalikan gambar yang disimpan dalam file di jalur yang ditentukan relatif terhadap kelas yang ditentukan
* @param clazz kelas kelas relatif untuk menemukan gambar
* @param path string jalur ke file gambar
* @Return Image gambar yang disimpan dalam file di jalur yang ditentukan
*/
gambar statis publik getImage (class <?> clazz, string path) {
String key = clazz.getName () + '|'
Gambar gambar = m_classimageMap.get (key);
if (gambar == null) {
if ((path.length ()> 0) && (path.charat (0) == '/')) {
String newPath = path.substring (1, path.length ());
Image = getImage (baru bufferedInputStream (clazz.getClassLoader (). getResourceAsstream (newPath)));
} kalau tidak {
Image = getImage (clazz.getResourceAsstream (path));
}
m_classimagemap.put (kunci, gambar);
}
gambar kembali;
}
/**
* Mengembalikan gambar yang disimpan dalam file di jalur yang ditentukan
* @param path string jalur ke file gambar
* @Return Image gambar yang disimpan dalam file di jalur yang ditentukan
*/
gambar statis publik getImage (jalur string) {
return getImage ("default", path); // $ non-nls-1 $
}
/**
* Mengembalikan gambar yang disimpan dalam file di jalur yang ditentukan
* @param Bagian String Bagian penyimpanan di cache
* @param path string jalur ke file gambar
* @Return Image gambar yang disimpan dalam file di jalur yang ditentukan
*/
gambar statis publik getImage (bagian string, string path) {
String key = bagian + '|'
Gambar gambar = m_classimageMap.get (key);
if (gambar == null) {
mencoba {
FileInputStream fis = new fileInputStream (path);
gambar = getImage (FIS);
m_classimagemap.put (kunci, gambar);
fis.close ();
} catch (ioException e) {
kembali nol;
}
}
gambar kembali;
}
/**
* CLEAR CACHED Images di bagian yang ditentukan
* @param Bagian Bagian Do Clear
*/
public static void clearimages (bagian string) {
untuk (iterator <string> i = m_classimagemap.keyset (). iterator (); i.hasnext ();) {
String key = i.next ();
if (! key.startswith (bagian + '|'))
melanjutkan;
Gambar gambar = m_classimageMap.get (key);
image.flush ();
I.remove ();
}
}
/**
* Mengembalikan ikon yang disimpan dalam file di jalur yang ditentukan relatif terhadap kelas yang ditentukan
* @param clazz kelas kelas relatif untuk menemukan ikon
* @param path string path ke file ikon
* Ikon @Return Ikon yang disimpan dalam file di jalur yang ditentukan
*/
Public Static Imageicon geticon (class <?> clazz, string path) {
return geticon (getImage (clazz, path));
}
/**
* Mengembalikan ikon yang disimpan dalam file di jalur yang ditentukan
* @param path string path ke file ikon
* Ikon @Return Ikon yang disimpan dalam file di jalur yang ditentukan
*/
Public Static Imageicon geticon (string path) {
return geticon ("default", path); // $ non-nls-1 $
}
/**
* Mengembalikan ikon yang disimpan dalam file di jalur yang ditentukan
* @param Bagian String Bagian penyimpanan di cache
* @param path string path ke file ikon
* Ikon @Return Ikon yang disimpan dalam file di jalur yang ditentukan
*/
Public Static Imageicon geticon (bagian string, string path) {
return geticon (getImage (bagian, jalur));
}
/**
* Mengembalikan ikon berdasarkan gambar yang ditentukan
* @param gambar gambar gambar asli
* Ikon @return ikon berdasarkan gambar
*/
public static imageicon geticon (gambar gambar) {
if (gambar == null)
kembali nol;
return new ImageIcon (Image);
}
}
Mainframe.java
Salinan kode adalah sebagai berikut:
impor java.awt.eventqueue;
impor java.awt.event.itemevent;
impor java.awt.event.itemlistener;
impor java.util.map;
impor java.util.set;
impor javax.swing.defaultcomboBoxModel;
impor javax.swing.jbutton;
impor javax.swing.jcombobox;
impor javax.swing.jframe;
impor javax.swing.jlabel;
impor javax.swing.jpanel;
impor javax.swing.jtextfield;
impor javax.swing.swingconstants;
impor javax.swing.uimanager;
impor javax.swing.border.titledborder;
Mainframe kelas publik memperluas jframe {
/**
*
*/
SerialVersionuid Long Statis Pribadi = -4595347311922711984L;
Private JTextField Textfield_3;
Private JTextField Textfield_1;
Private JComboBox ComboBox_1;
Private JTextfield Textfield;
Private Jcombobox CityComboBox;
Private JcomboBox ComboBox;
/**
* Luncurkan aplikasi
*
* @param args
*/
public static void main (string args []) {
Eventqueue.invokelater (runnable baru () {
public void run () {
mencoba {
Uimanager.setLookandFeel ("com.sun.java.swing.plaf.nimbus.nimbuslookandfeel");
Bingkai mainframe = mainframe baru ();
frame.setVisible (true);
} catch (Exception e) {
e.printstacktrace ();
}
}
});
}
/**
* Buat bingkai
*/
mainframe publik () {
getContentPane (). setLayout (null);
setbounds (100, 100, 518, 379);
setDefaultCloseOperation (jframe.exit_on_close);
// Dapatkan Kota/Kabupaten Default
String province = (string) getProvince () [0];
settitle ("Masukkan kota dan kabupaten yang sesuai untuk menanyakan provinsi/kotamadya yang ditunjuk");
Final BackgroundPanel BackgroundPanel = New BackgroundPanel ();
BackgroundPanel.setImage (swingResourCeManager.getImage (mainframe.class, "/images/background.jpg"));
latar belakangPanel.setbounds (0, 0, 510, 380);
getContentPane (). Tambah (BackgroundPanel);
panel jpanel terakhir = jpanel baru ();
panel.setopaque (false);
Panel.setbounds (36, 126, 438, 70);
latar belakangPanel.add (panel);
Panel.setLayout (null);
Panel.setBorder (judul baru (null, "Place of Residence", Titledborder.default_justification, Titledborder.default_position, null, null));
CityComboBox = new jcomboBox ();
CityComboBox.setbounds (245, 25, 124, 27);
Panel.Add (CityComboBox);
CityComboBox.SetModel (DefaultComboBoBoxModel baru (GetCity (Provinsi)));
comboBox = new jcomboBox ();
comboBox.setbounds (25, 25, 124, 27);
Panel.Add (ComboBox);
ComboBox.AdditemListener (ItemListener baru () {
public void itemStateChanged (final itemEvent e) {// Opsi Status Change Event
itemChange ();
}
});
ComboBox.setModel (DefaultComboBoxModel baru (GetProvince ()));
label jlabel terakhir = jLabel baru ();
label.setText ("Provinsi/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);
latar belakangPanel.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);
latar belakangPanel.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 (DefaultComboBoBoxModel baru (string baru [] {"pria", "betina"}));
final jlabel label_4 = new jlabel ();
label_4.setbounds (36, 212, 65, 18);
latar belakangPanel.add (label_4);
label_4.sethorizontalAlignment (swingconstants.right);
label_4.sethorizontaltextPosition (swingconstants.leading);
label_4.setText ("Alamat terperinci:");
textfield_1 = jTextField baru ();
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);
latar belakangPanel.add (label_4_1);
label_4_1.sethorizontaltextPosition (swingconstants.leading);
label_4_1.sethorizontalAlignment (swingconstants.right);
label_4_1.setText ("E-mail:");
textfield_3 = jTextField baru ();
textfield_3.setbounds (113, 248, 367, 27);
BackgroundPanel.Add (TextField_3);
Tombol Jbutton terakhir = JButton baru ();
Button.setbounds (159, 289, 75, 28);
latar belakangPanel.add (tombol);
Button.setText ("Save");
final jbutton button_1 = jbutton baru ();
tombol_1.setbounds (265, 289, 75, 28);
latar belakangPanel.add (tombol_1);
Button_1.setText ("Reset");
//
}
/**
* Dapatkan provinsi, kotamadya, daerah otonom
*
* @kembali
*/
objek publik [] getProvince () {
Peta <String, String []> MAP = CityMap.model; // Dapatkan informasi provinsi dan simpan ke peta
Set <string> set = map.keyset (); // Dapatkan kunci dalam koleksi peta dan kembalikan sebagai koleksi set
Objek [] province = set.toArray (); // Konversi ke array
Provinsi Kembali; // Kembalikan Informasi Provinsi yang Diperoleh
}
/**
* Dapatkan kota/daerah yang sesuai dengan provinsi yang ditunjuk
*
* @param SelectProvince
* @kembali
*/
string publik [] getCity (string selectprovince) {
Peta <String, String []> MAP = CityMap.model;
String [] arrcity = Map.get (SelectProvince);
Kembalikan arrcity; // kembali ke kota/daerah yang diperoleh
}
private void itemChange () {
String selectProvince = (string) comboBox.getSelectedItem ();
citycombobox.removeallitems ();
String [] arrcity = getCity (SelectProvince);
CityComboBox.setModel (DefaultComboBoBoxModel (Arrcity) baru);
}
}
Efeknya ditunjukkan pada gambar: