Les ensembles de cartes peuvent enregistrer les relations de cartographie des clés, ce qui est très adapté aux structures de données requises dans cet exemple. Utilisation des ensembles de cartes.
Analyse des idées:
1. Créez un ensemble de cartographie national (province, municipalité, région autonome), c'est-à-dire un objet LinkedHashMap. La valeur est un tableau unidimensionnel de type chaîne.
Le code est le suivant:
CityMap.java
La copie de code est la suivante:
import java.util.linkedhashmap;
importation java.util.map;
classe publique CityMap {
/ **
* National (Province, municipalité, région autonome) Collection de cartographie
* /
Map statique publique <String, String []> Model = new LinkedHashMap <String, String []> ();
statique{
Model.put ("Beijing", new String [] {"Beijing"});
Model.put ("Shanghai", nouvelle chaîne [] {"Shanghai"});
Model.put ("Tianjin", nouvelle chaîne [] {"Tianjin"});
Model.put ("chongqing", new String [] {"chongqing"});
Model.put ("HeilongJiang", New String [] {"Harbin", "Qiqihar", "Mudanjiang", "Daqing", "Yichun", "Shuangyashan", "Hegang", "Jixi", "Jiamusi", " Qitaihe "," heihe "," suhua "," 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 ("Mongolie intérieure", nouvelle chaîne [] {"Hohhot", "Hulunbuir", "Xilinhot", "Baotou", "Chipong", "HaMil", "Wuhai", "Ordos", "Tongliao"} ));
Model.put ("Hebei", New String [] {"Shijiazhuang", "Tangshan", "Zhangjiakou", "Langfang", "Xingtai", "Handan", "CANGZHOU", "Hengshui", "Chengde", "," Baoding "," qinhuangdao "});
Model.put ("Henan", nouvelle chaîne [] {"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", nouvelle chaîne [] {"nanjing", "suzhou", "kunshan", "nantong", "taicang", "wuxian", "xuzhou", "yixing", "zhenjiang", " Huaian "," Changshu "," Yancheng "," Taizhou "," Wuxi "," Lianyungang "," Yangzhou "," Changzhou "," Suqian "});
Model.put ("anhui", nouvelle chaîne [] {"hefei", "chaohu", "bengbu", "anqing", "lu'an", "chuzhou", "ma'anshan", "fuyang", " Xuancheng "," Tongling "," Huaibei "," Wuhu "," Haozhou "," Suzhou "," Huainan "," Chizhou "});
Model.put ("shaanxi", nouvelle chaîne [] {"xi'an", "hancheng", "ankang", "hanzhong", "baoji", "xianyang", "yulin", "weinan", "shangluo" , "Tongchuan", "Yan'an"});
Model.put ("Ningxia", nouvelle chaîne [] {"Yinchuan", "Guyuan", "Zhongwei", "Shizuish", "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", nouvelle chaîne [] {"Changsha", "Shaoyang", "Changde", "Chenzhou", "Jishou", "Zhuzhou", "Loudi", "Xiangtan", "Yiyang", " Yongzhou "," Yueyang "," Hengyang "," Huaihua "," Shaoshan "," Zhangjiajie "});
Model.put ("Zhejiang", New String [] {"Hangzhou", "Huzhou", "Jinhua", "Ningbo", "Lishi", "Shaoxing", "Yandangshan", "Quzhou", "Jiaxing", " Taizhou "," Zhoushan "," Wenzhou "});
Model.put ("jiangxi", nouvelle chaîne [] {"nanchang", "pingxiang", "jiujiang", "shangrao", "fuzhou", "ji'an", "yingtan", "yichun", "xinyu" , "Jingdezhen", "Ganzhou"});
Model.put ("Fujian", New String [] {"Fuzhou", "Xiamen", "Longyan", "Nanping", "Ningde", "Poutian", "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 "," Nanchong " });
Model.put ("Guangdong", New String [] {"Guangzhou", "Shenzhen", "Chaozhou", "Shaoguan", "Zhanjiang", "Huizhou", "Qingyuan", "Dongguan", "Jiangmen", "Qingyuan", "Dongguan", "Jiangmen", "Qingyuan", "Dongguan", "Jiangmen", " Maoming "," zhaoqing "," shanwei "," heyuan "," jieyang "," meizhou "," zhongshan "," deqing "," yangjiang "," yunfu "," zhuhai "," shantou "," foshan " });
Model.put ("Guangxi", New String [] {"Nanning", "Guilin", "Yangshuo", "Liuzhou", "Wuzhou", "Yulin", "Guant", "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", "Changji", "Hami", "Hotan", "Kashgar", "Karamay", "Shihezi", " Tacheng "," Korla "," Turpan "," Yining "});
}
}
2. Définissez la méthode pour obtenir la province, créez une collection de cartes, attribuez la collection de cartes obtenue à l'étape précédente et utilisez la méthode KeySet () de la collection de cartes pour obtenir l'ensemble de jeu composé de tous les objets clés dans le Collection, c'est-à-dire la collection de la province, créez un tableau unidimensionnel de type objet, utilisez la méthode ToArray () de l'interface définie pour convertir la collection de sets en un tableau et renvoyez ce tableau comme paramètre pour la chute de sélection de la province -Down list.
3. Utilisez la méthode setModel () de la classe JCombobox pour ajouter des informations de province à la liste déroulante de la province, et les paramètres sont la méthode d'obtention des provinces à l'étape précédente.
4. Définissez la méthode d'obtention des villes / comtés en fonction de la province, créez une collection de cartes, attribuez la collection de cartes obtenue à l'étape 1 et utilisez la méthode get () de la collection de cartes pour obtenir la valeur de la clé spécifiée C'est-à-dire la collection Ville / County.
5. Définissez l'événement de changement d'option de la liste déroulante de la province. RemoveAlLitems () de la classe JCombobox pour l'effacer. liste.
Le code est le suivant:
Backgroundpanel.java
La copie de code est la suivante:
import java.awt.graphics;
import java.awt.image;
import javax.swing.jpanel;
/ **
* Assemblage du panneau avec fond
*
* @author zhongwei lee
* /
classe publique BackgroundPanel étend Jpanel {
/ **
*
* /
Final statique privé long SerialVersionUID = 7758689434195492602L;
/ **
* Image d'arrière-plan
* /
image d'image privée;
/ **
* Méthode de construction
* /
Public BackgroundPanel () {
super();
setOpaque (false);
setLayout (null);
}
/ **
* Comment définir des images
* /
public void setimage (image image) {
this.image = image;
}
@Outrepasser
PaintComponent vide protégé (graphiques G) {// Réécrivez l'apparence du composant de dessin
if (image! = null) {
int larget = getWidth (); // Obtenez la taille des composants
int hauteur = getheight ();
G.DrawImage (image, 0, 0, largeur, hauteur, ceci); // Dessiner l'image est la même que la taille du composant
}
super.paintcomponent (g); // exécuter la méthode de superclasse
}
}
SwingResourceManager.java
La copie de code est la suivante:
import java.awt.image;
import java.awt.toolkit;
Importer java.io.BufferedInputStream;
Importer java.io.ByteArrayOutputStream;
import java.io.fileInputStream;
Importer java.io.ioException;
import java.io.inputStream;
import java.util.hashmap;
Importer java.util.iterator;
import javax.swing.imageicon;
/ **
* Classe de services publics pour gérer des ressources telles que les couleurs, les polices, les images, etc.
*
* Cette classe peut être distribuée librement dans le cadre de toute application ou plugin.
* <p>
* Copyright (c) 2003 - 2004, Instantiations, Inc. <br> Tous droits réservés
*
* @author scheglov_ke
* /
classe publique swingResourceManager {
/ **
* Carte les noms d'images aux images
* /
Hashmap statique privé <chaîne, image> m_classimagemap = new hashmap <string, image> ();
/ **
* Renvoie une image codée par le flux d'entrée spécifié
* @Param est entrée
* @return Image L'image codée par le flux d'entrée spécifié
* /
Image statique privée getImage (InputStream Is) {
essayer {
ByteArrayOutputStream baos = new ByteArrayOutputStream ();
octet buf [] = nouveau octet [1024 * 4];
while (true) {
int n = is.read (buf);
if (n == -1)
casser;
baos.write (buf, 0, n);
}
baos.close ();
return toolkit.getDefaultToolkit (). CreateImage (baos.ToByTearray ());
} catch (jetable e) {
retourner null;
}
}
/ **
* Renvoie une image stockée dans le fichier au chemin spécifié par rapport à la classe spécifiée
* @param CLAZZ CLASS La classe par rapport à laquelle trouver l'image
* @param chemin de chemin le chemin du fichier image
* @return Image L'image stockée dans le fichier sur le chemin spécifié
* /
Image statique publique getImage (classe <?> Clazz, chemin de chaîne) {
String key = Clazz.getName () + '|' + Path;
Image image = m_classimagemap.get (key);
if (image == null) {
if ((path.length ()> 0) && (path.charat (0) == '/')) {
String newpath = path.substring (1, path.length ());
Image = getImage (new BufferedInputStream (Clazz.getClassloader (). getResourceAsStream (newPath)));
} autre {
Image = getImage (Clazz.getResourceSstream (chemin));
}
m_classimagemap.put (clé, image);
}
Image de retour;
}
/ **
* Renvoie une image stockée dans le fichier sur le chemin spécifié
* @param chemin de chemin le chemin du fichier image
* @return Image L'image stockée dans le fichier sur le chemin spécifié
* /
Image statique publique getImage (String Path) {
return getImage ("par défaut", chemin);
}
/ **
* Renvoie une image stockée dans le fichier sur le chemin spécifié
* Section @param String la section de stockage dans le cache
* @param chemin de chemin le chemin du fichier image
* @return Image L'image stockée dans le fichier sur le chemin spécifié
* /
Image statique publique getImage (section de chaîne, chemin de chaîne) {
String key = section + '|' + swingResourceManager.class.getName () + '|' + Path;
Image image = m_classimagemap.get (key);
if (image == null) {
essayer {
FileInputStream fis = new FileInputStream (path);
image = getImage (fis);
m_classimagemap.put (clé, image);
fis.close ();
} catch (ioexception e) {
retourner null;
}
}
Image de retour;
}
/ **
* Effacer des images mises en cache dans la section spécifiée
* Section @param La section est claire
* /
ClearImages de vide statique public (section de chaîne) {
for (iterator <string> i = m_classimagemap.keyset (). iterator (); i.hasnext ();) {
String key = i.next ();
if (! key.startswith (section + '|'))
continuer;
Image image = m_classimagemap.get (key);
image.flush ();
I.Remove ();
}
}
/ **
* Renvoie une icône stockée dans le fichier au chemin spécifié par rapport à la classe spécifiée
* @param CLAZZ CLASS La classe par rapport à laquelle trouver l'icône
* @param chemin de chemin le chemin du fichier icône
* Icône @return L'icône stockée dans le fichier sur le chemin spécifié
* /
Public Static ImageIcon geticon (classe <?> Clazz, chemin de chaîne) {
return genicon (getImage (Clazz, chemin));
}
/ **
* Renvoie une icône stockée dans le fichier sur le chemin spécifié
* @param chemin de chemin le chemin du fichier icône
* Icône @return L'icône stockée dans le fichier sur le chemin spécifié
* /
Public Static ImageIcon geticon (String Path) {
return genicon ("par défaut", chemin);
}
/ **
* Renvoie une icône stockée dans le fichier sur le chemin spécifié
* Section @param String la section de stockage dans le cache
* @param chemin de chemin le chemin du fichier icône
* Icône @return L'icône stockée dans le fichier sur le chemin spécifié
* /
Public Static ImageIcon geticon (section de chaîne, chemin de chaîne) {
return geticon (getImage (section, chemin));
}
/ **
* Renvoie une icône basée sur l'image spécifiée
* @param image image l'image d'origine
* @return icon l'icône basée sur l'image
* /
Public Static ImageIcon geticon (image d'image) {
if (image == null)
retourner null;
retourner une nouvelle imageicon (image);
}
}
Mainframe.java
La copie de code est la suivante:
import java.awt.eventqueue;
import java.awt.event.iteMEvent;
import java.awt.event.itemListener;
importation java.util.map;
import java.util.set;
importer javax.swing.defaultcomboBoxModel;
import javax.swing.jbutton;
Importer javax.swing.jcombobox;
import javax.swing.jframe;
import javax.swing.jlabel;
import javax.swing.jpanel;
import javax.swing.jtextfield;
Importer javax.swing.swingConstants;
import javax.swing.uimanager;
import javax.swing.border.titledborder;
classe publique mainframe étend jframe {
/ **
*
* /
Final statique privé long SerialVersionUID = -4595347311922711984L;
privé jTextfield TextField_3;
privé jTextField TextField_1;
JCOMBOBOX PRIVÉE COMBOBOX_1;
Jtexfield privé Textfield;
JCOMBOBOX PRIVÉE CITYCOMBOBOX;
JCOMBOBOX PRIVÉE COMBOBOX;
/ **
* Lancez l'application
*
* @param args
* /
public static void main (String args []) {
EventQueue.invokelater (new Runnable () {
public void run () {
essayer {
Uimanager.setLookAndFeel ("com.sun.java.swing.plaf.nimbus.nimbuslookAndFeel");
MAINFRAME FRAME = NOUVEAU ENTREPRISE ();
frame.setVisible (true);
} catch (exception e) {
e.printStackTrace ();
}
}
});
}
/ **
* Créez le cadre
* /
public mainframe () {
getContentPane (). setLayout (null);
Setbounds (100, 100, 518, 379);
setDefaultCloseOperation (jframe.exit_on_close);
// Obtenez la ville / comté par défaut
String province = (String) getProvince () [0];
Setttitle ("Entrez dans la ville et le comté correspondants pour interroger la province / municipalité désignée");
BackgroundPanel final BackgroundPanel = new BackgroundPanel ();
BackgroundPanel.SetImage (swingResourceManager.getImage (mainframe.class, "/images/background.jpg"));
BackgroundPanel.setBounds (0, 0, 510, 380);
getContentPane (). Add (backgroundPanel);
Panneau JPanel final = new JPanel ();
panneau.SetOpaque (false);
Panel.SetBounds (36, 126, 438, 70);
BackgroundPanel.add (panneau);
PANNEL.SETLAYOUT (NULL);
PANNEL.Setborder (nouveau TitedBorder (null, "Place of Residence", intimedborder.default_justification, tiledBorder.default_position, null, null));
CityComboBox = new JComboBox ();
CityComboBox.SetBounds (245, 25, 124, 27);
PANNEL.ADD (CityCombobox);
CityComboBox.SetModel (nouveau defaultComboBoxModel (GetCity (province)));
combobox = new JComboBox ();
combobox.setbounds (25, 25, 124, 27);
PANNEL.ADD (COMBOBOX);
combobox.additemListener (new itemListener () {
public void itemStateChanged (final itemEvent e) {// L'événement de modification d'état de l'option
itemChange ();
}
});
combobox.setModel (nouveau defaultComboBoxModel (getProvince ()));
Label JLabel final = new JLabel ();
Label.SeTText ("Province / Metropolis");
Label.SetBounds (155, 30, 66, 18);
panneau.add (étiquette);
JLABEL FINAL Label_1 = new JLabel ();
Label_1.seTText ("City / County");
Label_1.setBounds (375, 30, 37, 18);
panneau.add (label_1);
JLABEL FINAL 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);
JLABEL FINAL 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 [] {"mâle", "feme"}));
JLABEL FINAL 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 ("Adresse détaillée:");
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 ("e-mail:");
TextField_3 = new JTextField ();
TextField_3.SetBounds (113, 248, 367, 27);
backgroundPanel.add (TextField_3);
Button JButton final = new Jbutton ();
Button.setbounds (159, 289, 75, 28);
backgroundPanel.add (bouton);
Button.SeTText ("Save");
final JButton Button_1 = new JBUTTON ();
Button_1.setBounds (265, 289, 75, 28);
backgroundPanel.add (Button_1);
Button_1.seTText ("réinitialiser");
//
}
/ **
* Obtenir des provinces, des municipalités, des régions autonomes
*
* @retour
* /
objet public [] getProvince () {
Map <string, string []> map = citymap.model; // obtenir des informations de la province et les enregistrer sur la carte
Set <string> set = map.keyset ();
Objet [] province = set.toArray ();
Province de retour;
}
/ **
* Obtenez la ville / comté correspondant à la province désignée
*
* @param selectProvince
* @retour
* /
public String [] getCity (String SelectProvince) {
Map <String, String []> map = CityMap.Model;
String [] ArrCity = map.get (selectProvince);
Retour Arrcity; // Retour à la ville / comté obtenue
}
private void itemchange () {
String selectProvince = (String) combobox.getSelectedItem ();
CityCombox.removealLitems ();
String [] ArrCity = GetCity (SelectProvince);
CityComboBox.SetModel (nouveau defaultComboBoxModel (Arrcity));
}
}
L'effet est montré dans l'image: