Наборы карт могут сохранять отношения с клавишами, которые очень подходят для структур данных, необходимых в этом примере. Использование наборов карт.
Анализ идеи:
1. Создайте национальный набор картинов (провинция, муниципалитет, автономный регион), то есть объект LinkedHashmap. Значение представляет собой одномерный массив типа строкового типа.
Код заключается в следующем:
Citymap.java
Кода -копия выглядит следующим образом:
импортировать java.util.linkedhashmap;
импортировать java.util.map;
открытый класс CityMap {
/**
* Национальная (провинция, муниципалитет, автономный регион) Коллекция картирования
*/
Общественная статическая карта <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", "daaqing", "yichun", "Shuangyashan", "Hegang", "Jixi", "Jiamusi", "," Qitaihe "," Heihe "," suihua "," daxinganling "});
model.put ("jilin", new String [] {"changchun", "Янбиянка", "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", "," Cangzhou "," hengshui "," chengde ",", "Cangzhou", "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", "Zazhuang", "liaocheng", ",", "," Yantai "," Zazhuan Jining "," heze "," tai'an "," Rizhao "," Donging "," dezhou "," binzhou "," laiwu "," weifang "});
model.put ("shanxi", new String [] {"taiyuan", "yangquan", "jincheng", "Jinzhong", "linfen", "yuncheng", "Changzhi", "Shuzhou", "Синьчжоу", "," 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 "," Hazhou "," 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", "Shizuishan", "wuzhong"});
model.put ("gansu", new String [] {"lanzhou", "baiyin", "Qingyang", "jiuquan", "tianshui", "wuwei", "Zhangye", "Gannan", "Linxia", ",", " Pingliang "," dingxi "," jinchang "});
model.put ("Qinghai", новая строка [] {"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", "Xinyu" , "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", ",", "Guangyuan", "Leshan", "Mianyang", "," Guangyuan "," Mianyang ",", "Guangyuan", "Mianyang", "," Guangyuan "," Mianyang ",", "Guangyuan". Deyang "," panzhihua "," ya'an "," yibin "," Zigong "," ganzizhou "," dazhou "," Ziyang "," guangan ",« Судья »,« Meishan »,« Нанчонг » });
model.put("Guangdong", new String[]{"Guangzhou","Shenzhen","Chaozhou","Shaoguan","Zhanjiang","Huizhou","Qingyuan","Dongguan","Jiangmen"," Маминг "," Чжаоцинг "," Шанвай "," Хейуан ",« Цзеян »,« Мейчжоу »,« Чжуншан »,« Децинг »,« Янцзян »,« Юнфу »,« Чжухай »,« Шанту »,« Фошн » });
model.put ("guangxi", new String [] {"nanning", "guilin", "yangshuo", "liuzhou", "wuzhou", "yulin", "Guiling", "hezhou", "Qinzhou", ",", ",", "," Guil Guigang "," fangchenggang "," baise "," beihai "," hechi "," laibin "," Chongzuo "});
model.put ("yunnan", новая строка [] {"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. Определите метод получения провинции, создать сбор карт, назначить коллекцию карт, полученную на предыдущем шаге, и используйте метод Keyset () коллекции карт, чтобы получить набор набора, состоящий из всех ключевых объектов в Сбор, то есть коллекция провинции, создайте одномерный массив типа объекта, используйте метод toarray () интерфейса SET для преобразования сбора SET в массив и вернуть этот массив в качестве параметра для выбора провинции. -Поллект списка.
3. Используйте метод SetModel () класса JComboBox, чтобы добавить информацию о провинции в раскрывающий списке провинции, и параметры являются методом получения провинций на предыдущем этапе.
4. Определите метод получения городов/округов в соответствии с провинцией, создайте сбор карт, назначите сбор карт, полученную на шаг 1, и используйте метод get () сбора карт, чтобы получить значение указанного ключа То есть коллекция города/округа.
5. Определите событие изменения статуса опциона в раскрывающемся списке провинции MELESSEALLITEMS () Метод класса JCombobox, чтобы очистить его. список.
Код заключается в следующем:
FoangyPanel.java
Кода -копия выглядит следующим образом:
импортировать java.awt.graphics;
импортировать java.awt.image;
импортировать javax.swing.jpanel;
/**
* Панель сборка с фоном
*
* @author Zhongwei Lee
*/
Public Class FounalPanel Extens JPanel {
/**
*
*/
Частный статический последний длинный сериал -версии = 7758689434195492602L;
/**
* Фоновая картина
*/
Частное изображение изображения;
/**
* Построение метода
*/
public founalpanel () {
супер();
setoPaque (false);
setlayout (null);
}
/**
* Как установить картинки
*/
public void setimage (изображение изображения) {
this.image = image;
}
@Override
Protected Void PaintComponent (Graphics G) {// Перепишите внешний вид компонента чертежа
if (image! = null) {
int width = getWidth (); // Получить размер компонента
int height = getheight ();
G.Drawimage (изображение, 0, 0, ширина, высота, это); // Рисование изображение такое же, как и размер компонента
}
Super.PaintComponent (g); // Выполнить метод суперкласса
}
}
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 является вводом потока ввода, кодируя данные изображения
* @return Image Изображение, кодируемое указанным потоком ввода
*/
частное статическое изображение Getimage (InputStream IS) {
пытаться {
BytearRayOutputStream BAOS = новый BytearRayOutputStream ();
byte buf [] = новый байт [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 (throwable e) {
вернуть ноль;
}
}
/**
* Возвращает изображение, хранящее в файле в указанном пути относительно указанного класса
* @param clazz class класс, относительно которого можно найти изображение
* @param path String Путь к файлу изображения
* @return изображение изображение, хранящее в файле на указанном пути
*/
Public Static Image GetiMage (класс <?> Clazz, String Path) {
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 (новый 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) {
вернуть GetImage («По умолчанию», PATH);
}
/**
* Возвращает изображение, хранящее в файле на указанном пути
* @param раздел строка раздел хранения в кэше
* @param path String Путь к файлу изображения
* @return изображение изображение, хранящее в файле на указанном пути
*/
Public Static Image GetiMage (раздел строки, String Path) {
String key = section + '|' + swingresourcemanager.class.getname () + '|' + path;
Image Image = m_classimagemap.get (key);
if (image == null) {
пытаться {
FileInputStream fis = new FileInputStream (Path);
Image = GetImage (FIS);
m_classimagemap.put (key, image);
fis.close ();
} catch (ioException e) {
вернуть ноль;
}
}
вернуть изображение;
}
/**
* Очистить кэшированные изображения в указанном разделе
* @param
*/
public static void clearimages (раздел строки) {
for (iterator <string> i = m_classimagemap.keyset (). iterator (); i.hasnext ();) {
String Key = i.Next ();
if (! key.startswith (раздел + '|'))
продолжать;
Image Image = m_classimagemap.get (key);
image.flush ();
I.Remove ();
}
}
/**
* Возвращает значок, хранящийся в файле в указанном пути относительно указанного класса
* @param clazz class класс, относительно которого можно найти значок
* @param path String Путь к файлу значка
* Значок @return Значок, хранящийся в файле на указанном пути
*/
Public Static Imageicon Geticon (Class <?> Clazz, String Path) {
вернуть Geticon (getimage (clazz, path));
}
/**
* Возвращает значок, хранящийся в файле на указанном пути
* @param path String Путь к файлу значка
* Значок @return Значок, хранящийся в файле на указанном пути
*/
Public Static Imageicon Geticon (String Path) {
return geticon («По умолчанию», Path);
}
/**
* Возвращает значок, хранящийся в файле на указанном пути
* @param раздел строка раздел хранения в кэше
* @param path String Путь к файлу значка
* Значок @return Значок, хранящийся в файле на указанном пути
*/
Public Static ImageIcon geticon (раздел String, String Path) {
вернуть Geticon (GetiMage (раздел, путь));
}
/**
* Возвращает значок на основе указанного изображения
* @param изображение изображение исходное изображение
* @return значок значок на основе изображения
*/
Public Static Imageicon Geticon (изображение изображения) {
if (image == null)
вернуть ноль;
вернуть новый Imageicon (изображение);
}
}
Мейнфрейм. 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 {
/**
*
*/
Частный статический последний длинный серийный режим = -4595347311922711984L;
private jtextfield textfield_3;
Private JTextField TextField_1;
Частный jcombobox combobox_1;
Private Jtextfield Textfield;
Частный JCombobox CityCombobox;
Частный jcombobox combobox;
/**
* Запустите приложение
*
* @param args
*/
public static void main (String args []) {
EventQueue.invokelater (new Runnable () {
public void run () {
пытаться {
Uimanager.setlookandfeel ("com.sun.java.swing.plaf.nimbus.nimbuslookandfeel");
MANICFRAME FRAME = NEW MANICFRAME ();
Frame.SetVisible (true);
} catch (Exception e) {
e.printstacktrace ();
}
}
});
}
/**
* Создать кадр
*/
public Manicframe () {
getContentPane (). SetLayout (null);
SetBounds (100, 100, 518, 379);
setDefaultCloseoPeration (jframe.exit_on_close);
// Получить город по умолчанию/округ
String Province = (String) getProvince () [0];
Посетенл («Войдите в соответствующий город и округ, чтобы запросить назначенную провинцию/муниципалитет»);
Окончательная фоновая панель founalpanel = new FounalPanel ();
founalpanel.setimage (swingresourcemanager.getimage (manicframe.class, "/images/background.jpg"));
founalpanel.setbounds (0, 0, 510, 380);
getContentPane (). Add (FounalPanel);
Final JPanel Panel = new jPanel ();
panel.setopaque (false);
Panel.SetBounds (36, 126, 438, 70);
founalpanel.add (панель);
panel.setlayout (null);
panel.setborder (новый название (null, «место резиденции», название gorborder.default_justification, название workborder.default_position, null, null));
CityCombobox = new jcombobox ();
CityCombobox.SetBounds (245, 25, 124, 27);
панель. Add (CityCombobox);
CityCombobox.setModel (новый DefaultComboboxModel (getCity (провинция)));
combobox = new jcombobox ();
ComboBox.SetBounds (25, 25, 124, 27);
panel.add (combobox);
combobox.additemlistener (new itemlistener () {
public void itemStateChanged (final ItemEvent E) {// Событие по изменению статуса опции
itemChange ();
}
});
combobox.setmodel (новый defaulcomboboxmodel (getprovince ()); // Добавить информацию о провинции
final jlabel label = new jlabel ();
label.settext ("провинция/мегаполис");
Label.SetBounds (155, 30, 66, 18);
panel.add (метка);
окончательный jlabel label_1 = new jlabel ();
label_1.settext ("City/County");
Label_1.SetBounds (375, 30, 37, 18);
panel.add (label_1);
окончательный jlabel label_2 = new jlabel ();
label_2.setbounds (36, 43, 65, 18);
founalpanel.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);
founalpanel.add (Textfield);
final jlabel label_3 = new jlabel ();
label_3.setbounds (36, 84, 65, 18);
founalpanel.add (label_3);
Label_3.SethorizontalAlignment (SwingConstants.right);
label_3.SethorizontalTextPosition (SwingConstants.Leading);
label_3.settext («Пол:»);
combobox_1 = new jcombobox ();
ComboBox_1.SetBounds (113, 81, 66, 25);
founalpanel.add (combobox_1);
combobox_1.setmodel (new DefaultComboboxModel (new String [] {"male", "kem"});
final jlabel label_4 = new jlabel ();
label_4.setbounds (36, 212, 65, 18);
founalpanel.add (label_4);
label_4.sethorizontalalenment (SwingConstants.right);
label_4.sethorizontalTextPosition (SwingConstants.Leading);
label_4.settext («Подробный адрес:»);
TextField_1 = new JTextField ();
TextField_1.SetBounds (113, 208, 367, 28);
founalpanel.add (textfield_1);
окончательный jlabel label_4_1 = new jlabel ();
label_4_1.setbounds (36, 252, 65, 18);
founalpanel.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);
founalpanel.add (textfield_3);
Final Jbutton Button = new Jbutton ();
Button.SetBounds (159, 289, 75, 28);
founalpanel.add (кнопка);
button.settext ("Сохранить");
final jbutton button_1 = new jbutton ();
Button_1.SetBounds (265, 289, 75, 28);
founalpanel.add (button_1);
button_1.settext ("сбросить");
//
}
/**
* Получить провинции, муниципалитеты, автономные регионы
*
* @возвращаться
*/
public Object [] getProvince () {
Map <string, string []> map = citymap.model; // Получить информацию о провинции и сохранить ее на карту
SET <String> set = map.keyset ();
Object [] province = set.toarray ();
Вернуть провинцию;
}
/**
* Получите город/округ, соответствующий назначенной провинции
*
* @param selectprovince
* @возвращаться
*/
public String [] getCity (String SelectProvince) {
Map <string, string []> map = citymap.model;
String [] arrcity = map.get (selectProvince);
возврат Arrcity;
}
private void itemChange () {
String selectProvince = (String) combobox.getSelectedItem ();
CityCombobox.RemovealLitems ();
String [] arrcity = getCity (SelectProvince);
CityCombobox.setModel (новый DefaultComboboxmodel (arrcity));
}
}
Эффект показан на картинке: