MAP-Sets können Schlüsselwert-Zuordnungsbeziehungen speichern, die für die in diesem Beispiel erforderlichen Datenstrukturen sehr geeignet sind. Verwenden von Kartensätzen.
Ideenanalyse:
1. Erstellen Sie einen nationalen Mapping -Set (Provinz, Gemeinde, autonome Region), dh ein LinkedHashMap -Objekt. Der Wert ist ein eindimensionales Array vom String-Typ.
Der Code ist wie folgt:
CityMap.java
Die Codekopie lautet wie folgt:
import Java.util.linkedhashMap;
import Java.util.map;
öffentliche Klasse CityMap {
/**
* Nationale (Provinz, Gemeinde, Autonome Region) Kartierungserhebung
*/
public static map <String, String []> model = new LinkedHashMap <String, String []> ();
statisch{
model.put ("peking", neuer String [] {"peking"});
model.put ("shanghai", new String [] {"Shanghai"});
model.put ("tianjin", neuer String [] {"tianjin"});
model.put ("chongqing", new String [] {"chongqing"});
Model.put ("Heilongjiang", New String [] {"Harbin", "Qiqihar", "Mudanjiang", "Daqing", "Yichun", "Shuangyashan", "Hegang", "Jixi", "Jiamusi", ",", ",", "Jiamusi", " Qitaihe "," Heihe "," Suihua "," Daxinganling "});
model.put ("jilin", neuer String [] {"Changchun", "Yanbian", "Jilin", "Baishan", "Baicheng", "Siping", "Songyuan", "Liaoyuan", "Da'an" , "Tonghua"});
Modell.put ("Liaoning", New String [] {"Shenyang", "Dalian", "Huludao", "Lushun", "Benxi", "Fushun", "Tieling", "Liaoyang", "Yingkou", " Fuxin "," Chaoyang "," Jinzhou "," Dandong "," Anshan "});
model.put ("innere Mongolei", 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", "Jiaookuo", "Hebi", "Xinxiang", "Anyang", "Puyang", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", " Xuchang "," Luohe "," Sanmenxia "," Nanyang "," Shangqiu "," Xinyang "," Zhoukou "," Zhumadian "});
model.put ("shandong", neuer String [] {"Jinan", "Qingdao", "Zibo", "Weihai", "Qufu", "Linyi", "Yantai", "Zaozhuang", "Liocheng", " JING "," HEZE "," Tai'an "," Rizhao "," Dongying "," Dezhou "," Binzhou "," Laiwu "," Weifang "});
model.put ("shanxi", neuer String [] {"Taiyuan", "Yangquan", "Jincheng", "Jinzhong", "Linfen", "Yunchg", "Changzhi", "Shuozhou", "Xinzhou", " Datong "," Luliang "});
model.put ("jiangsu", neuer String [] {"Nanjing", "Suzhou", "Kunshan", "Nantong", "Taicang", "Wuxian", "Xuzhou", "Yixing", "Zhenjiang", ",", ",", "," Zhenjiang ",", " Huaian "," Changshu "," Yancheng "," Taizhou "," Wuxi "," Lianyungang "," Yangzhou "," Changzhou "," Suqian "});
model.put ("anhui", neuer String [] {"hefei", "chaohu", "bengbu", "anqing", "lu'an", "chuzhou", "ma'anshan", "fuyang", ",", ",", "Fuyang", ",", ",", "," Fuyang "," Xuanchg "," Zunge "," Huaibei "," Wuhu "," Haozhou "," Suzhou "," Huainan "," Chizhou "});
model.put ("shaanxi", neuer String [] {"xi'an", "Hancheng", "Ankang", "Hanzhong", "Baoji", "Xianyang", "Yulin", "Weinan", "Shangluo" , "Tongchuan", "Yan'an"});
model.put ("ningxia", neuer String [] {"Yinchuan", "Guyuan", "Zhongwei", "Shizuishan", "Wuzhong"});
model.put ("gansu", neuer String [] {"Lanzhou", "Baiyin", "Qingyang", "Jiuquan", "Tianshui", "Wuwei", "Zhangye", "Gannan", "Linxia", Pingliang "," dingxi "," jinchang "});
model.put ("qinghai", neuer 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", neuer String [] {"Changsha", "Shaoyang", "Changde", "Chenzhou", "Jishou", "Zhuzhou", "Loudi", "Xiangtan", "Yiyang", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", " Yongzhou "," Yueyang "," Hengyang "," Huaihua "," Shaoshan "," Zhangjiajie "});
model.put ("zhejiang", neuer String [] {"Hangzhou", "Huzhou", "Jinhua", "Ningbo", "Lishui", "Shaoxing", "Yandangshan", "Quzhou", "Jiaxing", ",", "," Jiaxing ",", ",", "," Jiaxing ",", ",", "," Jiaxing "," Taizhou "," Zhoushan "," Wenzhou "});
model.put ("jiangxi", neuer String [] {"Nanchang", "Pingxiang", "Jiujiang", "Shangrao", "Fuzhou", "Ji'an", "Yingtan", "Yichun", "Xinyu" , "Jingdezhen", "Ganzhou"});
model.put ("fujian", neuer 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", ",", "Mianyang", ",", "Guangyuan", "Leshan", "Mianyang", ",", "," Mianyang ",", ",", "Mianyang", ",", "," Mianyang ",", ",", "Mianyang", ",", "Guangyuan", "Mianyang", ",", "Mianyang", " Deyang "," Panzhihua "," Ya'an "," Yibin "," Zigong "," Ganzizhou "," Dazhou "," Ziyang "," Guang'an "," Gulinne "," Meishan "," Nanchong "," Nanchong "," Nanchong " });
model.put("Guangdong", new String[]{"Guangzhou","Shenzhen","Chaozhou","Shaoguan","Zhanjiang","Huizhou","Qingyuan","Dongguan","Jiangmen"," Maoming "," Zhaoqing "," Shanwei "," Heyuan "," Jieyang "," Meizhou "," Zhongshan "," Deqing "," Yangjiang "," Yunfu "," Zhuhai "," Shantou "," Foshan "," Foshan "," Foshan "," Foshan ",", "foshan" });
model.put ("Guangxi", neuer String [] {"Nanning", "Guilin", "Yangshuo", "Liuzhou", "Wuzhou", "Yulin", "Guiling", "Hiszhou", "Qinzhou", ",", " Guigang "," Fangchenggang "," Baise "," Beihai "," Hechi "," Laibin "," Chongzuo "});
model.put ("yunnan", neuer String [] {"Kunming", "Baoshan", "Chuxiong", "Dehong", "Honghe", "Lincang", "Nujiang", "Qujing", "Simao", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", " Wenshan "," Yuxi "," Zhaotong "," Lijiang "," Dali "});
model.put ("hainan", neuer String [] {"Haikou", "Sanya", "Danzhou", "Qiongshan", "Tongshi", "Wenchang"});
model.put ("xinjiang", neuer String [] {"Urumqi", "Altay", "Aksu", "Changji", "Hami", "Hotan", "Kashgar", "Karamay", "Shihezi", " Tacheng "," Korla "," Turpan "," Yining "});
}
}
2. Definieren Sie die Methode, um die Provinz zu erhalten, eine Kartensammlung zu erstellen, die im vorherige Schritt erhaltene Kartensammlung zuweisen und die Methode der Kartierung der Kartenkollektion verwenden, um den Set -Set zu erhalten, der alle Schlüsselobjekte in den Schlüsselobjekten zusammenfasst Die Sammlung, dh die Provinzsammlung, erstellen Sie ein eindimensionales Array vom Objekttyp, verwenden Sie die Methode TOARRAY () der SET-Schnittstelle, um die SET-Sammlung in ein Array umzuwandeln und dieses Array als Parameter für den Drop der Provinzauswahl zurückzugeben -Down -Liste.
3. Verwenden Sie die SetModel () -Methode der JCOMBOBOX-Klasse, um die Provinz-Informationen zur Dropdown-Liste der Provinz hinzuzufügen, und die Parameter sind die Methode, um die Provinzen im vorherigen Schritt zu erhalten.
4. Definieren Sie die Methode zum Erhalten von Städten/Landkreisen gemäß der Provinz, erstellen Sie eine Kartensammlung, weisen Sie die in Schritt 1 erhaltene Kartensammlung zu und verwenden Sie die Methode Get () der Kartensammlung Das heißt, die Sammlung der Stadt/des Landkreises.
5. Definieren Sie die Option Statusänderung Ereignis der Provinz-Dropdown-Liste removeallitems () Methode der JCOMBOBOX-Klasse, um sie zu klären, die Stadt/County-Array nach der ausgewählten Provinz erhalten und schließlich die SetModel () -Methode von JCOMBOBOX verwenden, um den Wert der Stadt/des Landkreises neu zu nutzen, Liste.
Der Code ist wie folgt:
Hintergrundpanel.java
Die Codekopie lautet wie folgt:
importieren java.awt.graphics;
import Java.awt.image;
import Javax.swing.jpanel;
/**
* Panelbaugruppe mit Hintergrund
*
* @Author Zhongwei Lee
*/
Hintergrundpanel der öffentlichen Klasse erweitert JPanel {
/**
*
*/
Private statische endgültige lange Serialversionuid = 7758689434195492602L;
/**
* Hintergrundbild
*/
privates Bildbild;
/**
* Konstruktionsmethode
*/
public Hintergrundpanel () {
super();
setopaque (falsch);
setLayout (null);
}
/**
* So setzen Sie Bilder
*/
public void setImage (Bildbild) {
this.image = Bild;
}
@Override
Protected Void PaintComponent (Grafik g) {// Schreiben Sie das Erscheinungsbild der Zeichenkomponente neu
if (Bild! = null) {
int width = getwidth (); // Komponentengröße abrufen
int Höhe = getheight ();
G.Drawimage (Bild, 0, 0, Breite, Höhe, dies); // Das Zeichnen des Bildes entspricht der Komponentengröße
}
Super.PaintComponent (G); // Superklassenmethode ausführen
}
}
SwingResourcemanager.java
Die Codekopie lautet wie folgt:
import Java.awt.image;
import Java.awt.toolkit;
import Java.io.BufferedInputStream;
importieren java.io.BytearrayoutputStream;
import Java.io.FileInputStream;
importieren java.io.ioException;
importieren java.io.inputstream;
import Java.util.hashMap;
Import Java.util.iterator;
import Javax.swing.imageicon;
/**
* Dienstprogrammklasse zum Verwalten von Ressourcen wie Farben, Schriftarten, Bildern usw.
*
* Diese Klasse kann als Teil einer Anwendung oder eines Plugins frei verteilt werden.
* <p>
* Copyright (C) 2003 - 2004, Instantiations, Inc. <br> Alle Rechte vorbehalten
*
* @Author Scheglov_ke
*/
öffentliche Klasse SwingResourcemanager {
/**
* Karten Bildnamen zu Bildern
*/
private statische Hashmap <String, Bild> m_classimagemap = new Hashmap <String, Image> ();
/**
* Gibt ein Bild zurück, das vom angegebenen Eingangsstrom kodiert wird
* @param wird inputStream der Eingabestream codiert, der die Bilddaten codiert
* @Return Bild Das vom angegebene Eingangsstrom codierte Bild, das codiert wurde
*/
privates statisches Bild getImage (InputStream ist) {
versuchen {
BytearrayoutputStream baos = new bytearrayoutputStream ();
Byte buf [] = neues Byte [1024 * 4];
while (wahr) {
int n = is.read (buf);
if (n == -1)
brechen;
baos.write (buf, 0, n);
}
baos.close ();
return toolkit.getDefaulttoolkit (). createImage (baos.tobytearray ());
} catch (throwable e) {
null zurückkehren;
}
}
/**
* Gibt ein Bild zurück, das in der Datei am angegebenen Pfad relativ zur angegebenen Klasse gespeichert ist
* @Param Clazz -Klasse die Klasse Relativ zu dem, um das Bild zu finden
* @param Pfad String den Pfad zur Bilddatei
* @Return Bild Das in der Datei am angegebenen Pfad gespeicherte Bild
*/
öffentliches statisches Bild GetImage (Klasse <?> Clazz, String Path) {
String key = clazz.getName () + '|' Pfad;
Image Image = m_classimagemap.get (Schlüssel);
if (image == null) {
if ((path.length ()> 0) && (path.charat (0) == '/' ')) {
String newpath = path.substring (1, path.length ());
Image = GetImage (neuer BufferedInputStream (clazz.getClassloader (). getResourceAsStream (NewPath)));
} anders {
Image = getImage (clazz.getResourceAsStream (Pfad));
}
m_classimagemap.put (Schlüssel, Bild);
}
Return Image;
}
/**
* Gibt ein Bild zurück, das in der Datei am angegebenen Pfad gespeichert ist
* @param Pfad String den Pfad zur Bilddatei
* @Return Bild Das in der Datei am angegebenen Pfad gespeicherte Bild
*/
öffentliches statisches Bild getImage (String -Pfad) {
return GetImage ("Standard", Pfad);
}
/**
* Gibt ein Bild zurück, das in der Datei am angegebenen Pfad gespeichert ist
* @Param -Abschnitt String Der Speicherbereich im Cache
* @param Pfad String den Pfad zur Bilddatei
* @Return Bild Das in der Datei am angegebenen Pfad gespeicherte Bild
*/
öffentliches statisches Bild getImage (String -Abschnitt, String -Pfad) {
String Key = Abschnitt + '|
Image Image = m_classimagemap.get (Schlüssel);
if (image == null) {
versuchen {
FileInputStream fis = new FileInputStream (Pfad);
Bild = getImage (fis);
m_classimagemap.put (Schlüssel, Bild);
fis.close ();
} catch (ioException e) {
null zurückkehren;
}
}
Return Image;
}
/**
* Löschen Sie zwischengespeicherte Bilder im angegebenen Abschnitt
* @Param Abschnitt Der Abschnitt löschen
*/
public static void Clearimages (String -Abschnitt) {
for (iterator <string> i = m_classimagemap.keyset (). iterator (); i.hasnext ();) {
String key = I.Next ();
if (! key.startswith (Abschnitt + '|'))
weitermachen;
Image Image = m_classimagemap.get (Schlüssel);
Image.flush ();
I.Remove ();
}
}
/**
* Gibt ein Symbol zurück, das in der Datei am angegebenen Pfad relativ zur angegebenen Klasse gespeichert ist
* @Param Clazz -Klasse Die Klasse Relativ zu welcher Ikone finden soll
* @param Pfad string den Pfad zur Symboldatei
* @Return -Symbol Das in der Datei am angegebenen Pfad gespeicherte Symbol
*/
public static imageicon geticon (Klasse <?> Clazz, String Path) {
return geticon (getImage (clazz, path));
}
/**
* Gibt ein Symbol zurück, das in der Datei am angegebenen Pfad gespeichert ist
* @param Pfad string den Pfad zur Symboldatei
* @Return -Symbol Das in der Datei am angegebenen Pfad gespeicherte Symbol
*/
public static imageicon geticon (String Pfad) {
return geticon ("Standard", Pfad);
}
/**
* Gibt ein Symbol zurück, das in der Datei am angegebenen Pfad gespeichert ist
* @Param -Abschnitt String Der Speicherbereich im Cache
* @param Pfad string den Pfad zur Symboldatei
* @Return -Symbol Das in der Datei am angegebenen Pfad gespeicherte Symbol
*/
public static imageicon geticon (String -Abschnitt, String -Pfad) {
return geticon (getImage (Abschnitt, Pfad));
}
/**
* Gibt ein Symbol zurück, das auf dem angegebenen Bild basiert
* @param Bild Bild Das Originalbild
* @Return -Symbol Das Symbol basierend auf dem Bild
*/
public static imageicon geticon (Bildbild) {
if (Bild == null)
null zurückkehren;
RECHTE NEUE ImageCon (Bild);
}
}
Mainframe.java
Die Codekopie lautet wie folgt:
Import Java.awt.Eventqueue;
Import Java.awt.event.ItemEvent;
import Java.awt.event.ItemListener;
import Java.util.map;
Java.util.set importieren;
import Javax.swing.DefaultcomboboxModel;
import Javax.swing.jbutton;
import Javax.swing.jcombobox;
importieren javax.swing.jframe;
import Javax.swing.jlabel;
import Javax.swing.jpanel;
importieren javax.swing.jtextfield;
import Javax.swing.swingConstants;
import Javax.swing.uimanager;
import Javax.swing.border.TitledBorder;
Public Class Mainframe erweitert JFrame {
/**
*
*/
Private statische endgültige lange Serialversionuid = -4595347311922711984L;
private jTextfield textfield_3;
private jTextfield textfield_1;
private jcombobox combobox_1;
Private JTextfield Textfield;
Privat Jcombobox Citycombobox;
private jcombobox combobox;
/**
* Starten Sie die Anwendung
*
* @param args
*/
public static void main (String args []) {
EventQueue.invokelater (new Runnable () {
public void run () {
versuchen {
Uimanager.setlookandfeel ("com.sun.java.swing.plaf.nimbus.nimbuslookandfeel");
Mainframe Fram = new Mainframe ();
Frame.SetVisible (True);
} catch (Ausnahme e) {
E. printstacktrace ();
}
}
});
}
/**
* Erstellen Sie den Rahmen
*/
public mainframe () {
getContentPane (). setLayout (null);
Setbounds (100, 100, 518, 379);
setDefaultCloseOperation (jframe.exit_on_close);
// Holen Sie sich die Standardstadt/den Bezirk
String provinz = (String) getProvince () [0];
Settitle ("Geben Sie die entsprechende Stadt und den Landkreis ein, um die ausgewiesene Provinz/Gemeinde zu befragen");
endgültiger Hintergrundpanel Hintergrundpanel = neuer Hintergrundpanel ();
HintergrundPanel.setImage (SwingResourCemanager.getImage (Mainframe.Class, "/images/background.jpg"));
Hintergrundpanel.SetBounds (0, 0, 510, 380);
getContentPane (). add (Hintergrundpanel);
Final JPanel Panel = new Jpanel ();
panel.setopaque (false);
Panel.Setbounds (36, 126, 438, 70);
Hintergrundpanel.Add (Panel);
panel.setLayout (null);
panel.setBorder (neuer Titel (Null, "Ort der Wohnung", Titel von Border.default_justification, Titelborder.Default_Position, NULL, NULL));
CityCombobox = new JcomBobox ();
CityCombobox.SetBounds (245, 25, 124, 27);
panel.Add (CityCombobox);
CityCombobox.SetModel (neuer defaultComboboxModel (GetCity (Provinz)));
combobox = new jcomBobox ();
Combobox.Setbounds (25, 25, 124, 27);
panel.Add (combobox);
combobox.additemListener (new itemListener () {
public void itemStatEchanged (endgültiger itemEvent e) {// Optionsstatusänderungsereignis
itemchange ();
}
});
Combobox.SetModel (neue defaultComboboxmodel (getProvince ());
endgültig JLabel Label = new JLabel ();
label.setText ("Provinz/Metropolis");
Label.Setbounds (155, 30, 66, 18);
Panel.Add (Etikett);
endgültig jLabel label_1 = new JLabel ();
label_1.setText ("Stadt/Bezirk");
Label_1.Setbounds (375, 30, 37, 18);
Panel.Add (Label_1);
endgültig JLabel Label_2 = new JLabel ();
Label_2.SetBounds (36, 43, 65, 18);
Hintergrundpanel.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);
Hintergrundpanel.Add (TextField);
endgültig JLabel Label_3 = new JLabel ();
Label_3.SetBounds (36, 84, 65, 18);
Hintergrundpanel.Add (Label_3);
Label_3.Sethorizontalalignment (SwingConstants.Right);
label_3.sethorizontaltextPosition (SwingConstants.Leading);
label_3.setText ("Geschlecht:");
combobox_1 = new jcomBobox ();
combobox_1.setBounds (113, 81, 66, 25);
Hintergrundpanel.Add (Combobox_1);
combobox_1.setModel (neuer defaultCombobOxModel (neuer String [] {"männlich", "weiblich"});
endgültig JLabel Label_4 = new JLabel ();
Label_4.SetBounds (36, 212, 65, 18);
Hintergrundpanel.Add (Label_4);
Label_4.Sethorizontalalignment (SwingConstants.Right);
Label_4.SethorizontaltextPosition (SwingConstants.Leading);
label_4.setText ("Detaillierte Adresse:");
textfield_1 = new JTextField ();
textfield_1.setBounds (113, 208, 367, 28);
Hintergrundpanel.Add (textfield_1);
endgültig jLabel label_4_1 = new JLabel ();
label_4_1.setBounds (36, 252, 65, 18);
Hintergrundpanel.Add (Label_4_1);
label_4_1.sethorizontaltextPosition (SwingConstants.Leading);
label_4_1.sethorizontalalignment (SwingConstants.Right);
label_4_1.setText ("E-Mail:");
textfield_3 = new JTextField ();
textfield_3.setBounds (113, 248, 367, 27);
Hintergrundpanel.Add (textfield_3);
Final Jbutton Button = new Jbutton ();
Taste.Setbounds (159, 289, 75, 28);
Hintergrundpanel.Add (Taste);
button.setText ("speichern");
endgültig jbutton button_1 = new Jbutton ();
Button_1.Setbounds (265, 289, 75, 28);
Hintergrundpanel.Add (Button_1);
button_1.setText ("Reset");
//
}
/**
* Provinzen, Gemeinden, autonome Regionen erhalten
*
* @zurückkehren
*/
öffentliches Objekt [] getProvince () {
Karte <String, String []> map = CityMap.model; // Informationen zur Provinz erhalten und auf der Karte speichern
Set <string> set = map.keyset ();
Objekt [] provinz = set.toarray ();
Provinz zurückgeben; // die erhaltenen Provinzinformationen zurückgeben
}
/**
* Lassen Sie die Stadt/den Landkreis der ausgewiesenen Provinz entsprechen
*
* @param selectProvince
* @zurückkehren
*/
public String [] getCity (String SelectProvince) {
Karte <String, String []> map = CityMap.model;
String [] arrcity = map.get (selectProvince);
Arrcity zurückgeben;
}
private void itemchange () {
String selectProvince = (String) combobox.getSelectedItem ();
CityCombobox.RemoveAllitems ();
String [] arrcity = getCity (SelectProvince);
CityCombobox.SetModel (neue defaultcomboboxmodel (Arrcity));
}
}
Der Effekt wird im Bild gezeigt: