Le même avec 1000 noms embarqués en dur dans l'application, pour la rendre directement exécutable, sans fichier externe.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
import java.awt.event.*;
import java.io.*;
import java.util.Scanner;
import javax.swing.*;
 
// appeler le fichier Exemple104_light_SmartJComboBox.java
// Nicolas_75
// le 24 août 2008
// pour http://www.developpez.net/forums/d26314/java/interfaces-graphiques-java/awt-swing/composants-standards/jcombobox-rechercher-elements/
 
public class Exemple104_light_SmartJComboBox {
 
    public static void main(String[] args) {
 
 
        // création de la fenêtre principale :
        final JFrame frame = new JFrame("SmartJComboBox (1000)") ;
 
 
        // 1000 parmi les 4036 chef-lieux de canton français :
        // (http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement.asp)
        final String[] NAMES = {
            "[1] Ambérieu-en-Bugey", "[2] Bâgé-le-Châtel", "[3] Bellegarde-sur-Valserine", "[4] Belley", "[5] Bourg-en-Bresse-Est", "[6] Brénod", "[7] Ceyzériat", "[8] Chalamont", "[9] Champagne-en-Valromey", "[10] Châtillon-sur-Chalaronne",
            "[11] Coligny", "[12] Collonges", "[13] Ferney-Voltaire", "[14] Gex", "[15] Hauteville-Lompnes", "[16] Izernore", "[17] Lagnieu", "[18] Lhuis", "[19] Meximieux", "[20] Montluel",
            "[21] Montrevel-en-Bresse", "[22] Nantua", "[23] Oyonnax-Nord", "[24] Poncin", "[25] Pont-d'Ain", "[26] Pont-de-Vaux", "[27] Pont-de-Veyle", "[28] Saint-Rambert-en-Bugey", "[29] Saint-Trivier-de-Courtes", "[30] Saint-Trivier-sur-Moignans",
            "[31] Seyssel", "[32] Thoissey", "[33] Treffort-Cuisiat", "[34] Trévoux", "[35] Villars-les-Dombes", "[36] Virieu-le-Grand", "[37] Bourg-en-Bresse-Nord-Centre", "[38] Bourg-en-Bresse-Sud", "[39] Péronnas", "[40] Miribel",
            "[41] Oyonnax-Sud", "[42] Reyrieux", "[43] Viriat", "[44] Anizy-le-Château", "[45] Aubenton", "[46] Bohain-en-Vermandois", "[47] Braine", "[48] Capelle", "[49] Catelet", "[50] Charly-sur-Marne",
            "[51] Château-Thierry", "[52] Chauny", "[53] Condé-en-Brie", "[54] Coucy-le-Château-Auffrique", "[55] Craonne", "[56] Crécy-sur-Serre", "[57] Fère", "[58] Fère-en-Tardenois", "[59] Guise", "[60] Hirson",
            "[61] Laon-Nord", "[62] Marle", "[63] Moÿ-de-l'Aisne", "[64] Neufchâtel-sur-Aisne", "[65] Neuilly-Saint-Front", "[66] Nouvion-en-Thiérache", "[67] Oulchy-le-Château", "[68] Ribemont", "[69] Rozoy-sur-Serre", "[70] Sains-Richaumont",
            "[71] Saint-Quentin-Centre", "[72] Saint-Simon", "[73] Sissonne", "[74] Soissons-Nord", "[75] Vailly-sur-Aisne", "[76] Vermand", "[77] Vervins", "[78] Vic-sur-Aisne", "[79] Villers-Cotterêts", "[80] Wassigny",
            "[81] Laon-Sud", "[82] Saint-Quentin-Nord", "[83] Saint-Quentin-Sud", "[84] Soissons-Sud", "[85] Tergnier", "[86] Bourbon-l'Archambault", "[87] Cérilly", "[88] Chantelle", "[89] Chevagnes", "[90] Commentry",
            "[91] Cusset-Nord", "[92] Dompierre-sur-Besbre", "[93] Donjon", "[94] Ébreuil", "[95] Escurolles", "[96] Gannat", "[97] Hérisson", "[98] Huriel", "[99] Jaligny-sur-Besbre", "[100] Lapalisse",
            "[101] Lurcy-Lévis", "[102] Marcillat-en-Combraille", "[103] Mayet-de-Montagne", "[104] Montet", "[105] Montluçon-Est (4e Canton)", "[106] Montluçon-Ouest (2e Canton)", "[107] Montmarault", "[108] Moulins-Sud", "[109] Moulins-Ouest", "[110] Neuilly-le-Réal",
            "[111] Saint-Pourçain-sur-Sioule", "[112] Souvigny", "[113] Varennes-sur-Allier", "[114] Vichy-Nord", "[115] Vichy-Sud", "[116] Montluçon-Nord-Est (1er Canton)", "[117] Montluçon-Sud (3e Canton)", "[118] Yzeure", "[119] Domérat-Montluçon-Nord-Ouest", "[120] Cusset-Sud",
            "[121] Annot", "[122] Banon", "[123] Barcelonnette", "[124] Barrême", "[125] Castellane", "[126] Allos-Colmars", "[127] Digne-les-Bains-Est", "[128] Entrevaux", "[129] Forcalquier", "[130] Javie",
            "[131] Lauzet-Ubaye", "[132] Manosque-Nord", "[133] Mées", "[134] Mézel", "[135] Motte-du-Caire", "[136] Moustiers-Sainte-Marie", "[137] Noyers-sur-Jabron", "[138] Peyruis", "[139] Reillanne", "[140] Riez",
            "[141] Saint-André-les-Alpes", "[142] Saint-Étienne-les-Orgues", "[143] Seyne", "[144] Sisteron", "[145] Turriers", "[146] Valensole", "[147] Volonne", "[148] Digne-les-Bains-Ouest", "[149] Manosque-Sud-Est", "[150] Manosque-Sud-Ouest",
            "[151] Aiguilles", "[152] Argentière-la-Bessée", "[153] Aspres-sur-Buëch", "[154] Barcillonnette", "[155] Bâtie-Neuve", "[156] Briançon-Nord", "[157] Chorges", "[158] Embrun", "[159] Gap-Campagne", "[160] Grave",
            "[161] Guillestre", "[162] Laragne-Montéglin", "[163] Monêtier-les-Bains", "[164] Orcières", "[165] Orpierre", "[166] Ribiers", "[167] Rosans", "[168] Saint-Bonnet-en-Champsaur", "[169] Saint-Étienne-en-Dévoluy", "[170] Saint-Firmin",
            "[171] Savines-le-Lac", "[172] Serres", "[173] Tallard", "[174] Veynes", "[175] Briançon-Sud", "[176] Gap-Centre", "[177] Gap-Nord-Est", "[178] Gap-Nord-Ouest", "[179] Gap-Sud-Est", "[180] Gap-Sud-Ouest",
            "[181] Antibes-Biot", "[182] Bar-sur-Loup", "[183] Beausoleil", "[184] Breil-sur-Roya", "[185] Saint-Laurent-du-Var-Cagnes-sur-Mer-Est", "[186] Cannes-Est", "[187] Contes", "[188] Coursegoules", "[189] Escarène", "[190] Grasse-Sud",
            "[191] Guillaumes", "[192] Levens", "[193] Menton-Est", "[194] Nice  1er Canton", "[195] Nice  2e  Canton", "[196] Nice  3e  Canton", "[197] Nice  4e  Canton", "[198] Puget-Théniers", "[199] Roquebillière", "[200] Roquesteron",
            "[201] Saint-Auban", "[202] Saint-Étienne-de-Tinée", "[203] Saint-Martin-Vésubie", "[204] Saint-Sauveur-sur-Tinée", "[205] Saint-Vallier-de-Thiey", "[206] Sospel", "[207] Lantosque", "[208] Vence", "[209] Villars-sur-Var", "[210] Villefranche-sur-Mer",
            "[211] Tende", "[212] Nice  5e  Canton", "[213] Nice  6e  Canton", "[214] Cannet", "[215] Vallauris-Antibes-Ouest", "[216] Mandelieu-Cannes-Ouest", "[217] Nice  7e  Canton", "[218] Nice  8e  Canton", "[219] Nice  9e  Canton", "[220] Nice 10e  Canton",
            "[221] Nice 11e  Canton", "[222] Nice 12e  Canton", "[223] Nice 13e  Canton", "[224] Nice 14e  Canton", "[225] Cagnes-sur-Mer-Ouest", "[226] Mougins", "[227] Antibes-Centre", "[228] Cagnes-sur-Mer-Centre", "[229] Cannes-Centre", "[230] Carros",
            "[231] Grasse-Nord", "[232] Menton-Ouest", "[233] Annonay-Nord", "[234] Antraigues-sur-Volane", "[235] Aubenas", "[236] Bourg-Saint-Andéol", "[237] Burzet", "[238] Cheylard", "[239] Chomérac", "[240] Coucouron",
            "[241] Joyeuse", "[242] Lamastre", "[243] Largentière", "[244] Montpezat-sous-Bauzon", "[245] Privas", "[246] Rochemaure", "[247] Saint-Agrève", "[248] Saint-Étienne-de-Lugdarès", "[249] Saint-Félicien", "[250] Saint-Martin-de-Valamas",
            "[251] Saint-Péray", "[252] Saint-Pierreville", "[253] Satillieu", "[254] Serrières", "[255] Thueyts", "[256] Tournon-sur-Rhône", "[257] Valgorge", "[258] Vallon-Pont-d'Arc", "[259] Vans", "[260] Vernoux-en-Vivarais",
            "[261] Villeneuve-de-Berg", "[262] Viviers", "[263] Voulte-sur-Rhône", "[264] Annonay-Sud", "[265] Vals-les-Bains", "[266] Asfeld", "[267] Attigny", "[268] Buzancy", "[269] Carignan", "[270] Charleville-Centre",
            "[271] Château-Porcien", "[272] Chaumont-Porcien", "[273] Chesne", "[274] Flize", "[275] Fumay", "[276] Givet", "[277] Grandpré", "[278] Juniville", "[279] Machault", "[280] Mézières-Centre-Ouest",
            "[281] Monthermé", "[282] Monthois", "[283] Mouzon", "[284] Novion-Porcien", "[285] Omont", "[286] Raucourt-et-Flaba", "[287] Renwez", "[288] Rethel", "[289] Rocroi", "[290] Rumigny",
            "[291] Sedan-Nord", "[292] Sedan-Est", "[293] Signy-l'Abbaye", "[294] Signy-le-Petit", "[295] Tourteron", "[296] Vouziers", "[297] Charleville-La Houillère", "[298] Mézières-Est", "[299] Nouzonville", "[300] Revin",
            "[301] Sedan-Ouest", "[302] Villers-Semeuse", "[303] Ax-les-Thermes", "[304] Bastide-de-Sérou", "[305] Cabannes", "[306] Castillon-en-Couserans", "[307] Foix-Ville", "[308] Fossat", "[309] Lavelanet", "[310] Mas-d'Azil",
            "[311] Massat", "[312] Mirepoix", "[313] Oust", "[314] Pamiers-Ouest", "[315] Quérigut", "[316] Sainte-Croix-Volvestre", "[317] Saint-Girons", "[318] Saint-Lizier", "[319] Saverdun", "[320] Tarascon-sur-Ariège",
            "[321] Varilhes", "[322] Vicdessos", "[323] Foix-Rural", "[324] Pamiers-Est", "[325] Aix-en-Othe", "[326] Arcis-sur-Aube", "[327] Bar-sur-Aube", "[328] Bar-sur-Seine", "[329] Bouilly", "[330] Brienne-le-Château",
            "[331] Chaource", "[332] Chavanges", "[333] Ervy-le-Châtel", "[334] Essoyes", "[335] Estissac", "[336] Lusigny-sur-Barse", "[337] Marcilly-le-Hayer", "[338] Méry-sur-Seine", "[339] Mussy-sur-Seine", "[340] Nogent-sur-Seine",
            "[341] Piney", "[342] Ramerupt", "[343] Riceys", "[344] Romilly-sur-Seine  1er Canton", "[345] Soulaines-Dhuys", "[346] Troyes  1er Canton", "[347] Troyes  2e  Canton", "[348] Troyes  3e  Canton", "[349] Vendeuvre-sur-Barse", "[350] Villenauxe-la-Grande",
            "[351] Romilly-sur-Seine  2e  Canton", "[352] Sainte-Savine", "[353] Troyes  4e  Canton", "[354] Troyes  5e  Canton", "[355] Troyes  6e  Canton", "[356] Troyes  7e  Canton", "[357] Chapelle-Saint-Luc", "[358] Alaigne", "[359] Alzonne", "[360] Axat",
            "[361] Belcaire", "[362] Belpech", "[363] Capendu", "[364] Carcassonne  1er Canton", "[365] Carcassonne  2e  Canton-Nord", "[366] Castelnaudary-Nord", "[367] Castelnaudary-Sud", "[368] Chalabre", "[369] Conques-sur-Orbiel", "[370] Couiza",
            "[371] Coursan", "[372] Durban-Corbières", "[373] Fanjeaux", "[374] Ginestas", "[375] Lagrasse", "[376] Lézignan-Corbières", "[377] Limoux", "[378] Mas-Cabardès", "[379] Montréal", "[380] Mouthoumet",
            "[381] Narbonne-Est", "[382] Peyriac-Minervois", "[383] Quillan", "[384] Saint-Hilaire", "[385] Saissac", "[386] Salles-sur-l'Hers", "[387] Sigean", "[388] Tuchan", "[389] Carcassonne  3e  Canton", "[390] Narbonne-Ouest",
            "[391] Narbonne-Sud", "[392] Carcassonne  2e  Canton-Sud", "[393] Aubin", "[394] Belmont-sur-Rance", "[395] Bozouls", "[396] Camarès", "[397] Campagnac", "[398] Capdenac-Gare", "[399] Cassagnes-Bégonhès", "[400] Conques",
            "[401] Cornus", "[402] Decazeville", "[403] Entraygues-sur-Truyère", "[404] Espalion", "[405] Estaing", "[406] Laguiole", "[407] Laissac", "[408] Marcillac-Vallon", "[409] Millau-Est", "[410] Montbazens",
            "[411] Mur-de-Barrez", "[412] Najac", "[413] Nant", "[414] Naucelle", "[415] Peyreleau", "[416] Pont-de-Salars", "[417] Réquista", "[418] Rieupeyroux", "[419] Rignac", "[420] Rodez-Est",
            "[421] Saint-Affrique", "[422] Saint-Amans-des-Cots", "[423] Saint-Beauzély", "[424] Saint-Chély-d'Aubrac", "[425] Sainte-Geneviève-sur-Argence", "[426] Saint-Geniez-d'Olt", "[427] Saint-Rome-de-Tarn", "[428] Saint-Sernin-sur-Rance", "[429] Salles-Curan", "[430] Salvetat-Peyralès",
            "[431] Baraqueville-Sauveterre", "[432] Sévérac-le-Château", "[433] Vézins-de-Lévézou", "[434] Villefranche-de-Rouergue", "[435] Villeneuve", "[436] Millau-Ouest", "[437] Rodez-Ouest", "[438] Rodez-Nord", "[439] Aix-en-Provence-Nord-Est", "[440] Aix-en-Provence-Sud-Ouest",
            "[441] Arles-Est", "[442] Arles-Ouest", "[443] Aubagne-Ouest", "[444] Berre-l'Étang", "[445] Châteaurenard", "[446] Ciotat", "[447] Eyguières", "[448] Gardanne", "[449] Istres-Nord", "[450] Lambesc",
            "[451] Marseille-Belsunce", "[452] Marseille - Notre-Dame-du-Mont", "[453] Marseille-Les Grands-Carmes", "[454] Marseille-La Belle-de-Mai", "[455] Marseille-Les Cinq-Avenues", "[456] Marseille-Le Camas", "[457] Marseille - Saint-Just", "[458] Marseille-Montolivet", "[459] Marseille-La Capelette", "[460] Marseille - Saint-Giniez",
            "[461] Martigues-Est", "[462] Orgon", "[463] Peyrolles-en-Provence", "[464] Port-Saint-Louis-du-Rhône", "[465] Roquevaire", "[466] Saintes-Maries-de-la-Mer", "[467] Saint-Rémy-de-Provence", "[468] Salon-de-Provence", "[469] Tarascon", "[470] Trets",
            "[471] Allauch", "[472] Marignane", "[473] Marseille - Saint-Lambert", "[474] Marseille - Saint-Mauront", "[475] Marseille-Verduron", "[476] Marseille-La Rose", "[477] Marseille-Les Olives", "[478] Marseille - Saint-Marcel", "[479] Marseille-La Pomme", "[480] Marseille-La Pointe-Rouge",
            "[481] Marseille - Saint-Barthélemy", "[482] Marseille-Mazargues", "[483] Aix-en-Provence-Centre", "[484] Châteauneuf-Côte-Bleue", "[485] Istres-Sud", "[486] Martigues-Ouest", "[487] Pélissanne", "[488] Pennes-Mirabeau", "[489] Vitrolles", "[490] Aubagne-Est",
            "[491] Marseille-La Blancarde", "[492] Marseille-Les Trois Lucs", "[493] Marseille - Notre-Dame-Limite", "[494] Marseille - Sainte-Marguerite", "[495] Marseille-Vauban", "[496] Aunay-sur-Odon", "[497] Balleroy", "[498] Bayeux", "[499] Bény-Bocage", "[500] Blangy-le-Château",
            "[501] Bourguébus", "[502] Bretteville-sur-Laize", "[503] Caen  1er Canton", "[504] Caen  2e  Canton", "[505] Cambremer", "[506] Caumont-l'Éventé", "[507] Condé-sur-Noireau", "[508] Creully", "[509] Douvres-la-Délivrande", "[510] Dozulé",
            "[511] Évrecy", "[512] Falaise-Nord", "[513] Falaise-Sud", "[514] Honfleur", "[515] Isigny-sur-Mer", "[516] Lisieux  1er Canton", "[517] Lisieux  2e  Canton", "[518] Livarot", "[519] Mézidon-Canon", "[520] Morteaux-Coulibœuf",
            "[521] Orbec", "[522] Pont-l'Évêque", "[523] Ryes", "[524] Saint-Pierre-sur-Dives", "[525] Saint-Sever-Calvados", "[526] Thury-Harcourt", "[527] Tilly-sur-Seulles", "[528] Trévières", "[529] Troarn", "[530] Trouville-sur-Mer",
            "[531] Vassy", "[532] Villers-Bocage", "[533] Vire", "[534] Caen  3e  Canton", "[535] Caen  4e  Canton", "[536] Hérouville-Saint-Clair (Caen 5e Canton)", "[537] Caen-Hérouville (Caen 6e Canton)", "[538] Caen  7e  Canton", "[539] Caen  8e  Canton", "[540] Caen  9e  Canton",
            "[541] Caen 10e  Canton", "[542] Cabourg", "[543] Ouistreham", "[544] Lisieux  3e  Canton", "[545] Allanche", "[546] Aurillac  1er Canton", "[547] Aurillac  2e  Canton", "[548] Champs-sur-Tarentaine-Marchal", "[549] Chaudes-Aigues", "[550] Condat",
            "[551] Laroquebrou", "[552] Massiac", "[553] Mauriac", "[554] Maurs", "[555] Montsalvy", "[556] Murat", "[557] Pierrefort", "[558] Pleaux", "[559] Riom-ès-Montagnes", "[560] Ruynes-en-Margeride",
            "[561] Saignes", "[562] Saint-Cernin", "[563] Saint-Flour-Nord", "[564] Saint-Flour-Sud", "[565] Saint-Mamet-la-Salvetat", "[566] Salers", "[567] Vic-sur-Cère", "[568] Aurillac  3e  Canton", "[569] Aurillac  4e  Canton", "[570] Arpajon-sur-Cère",
            "[571] Jussac", "[572] Aigre", "[573] Angoulême-Est", "[574] Angoulême-Nord", "[575] Aubeterre-sur-Dronne", "[576] Baignes-Sainte-Radegonde", "[577] Barbezieux-Saint-Hilaire", "[578] Blanzac-Porcheresse", "[579] Brossac", "[580] Chabanais",
            "[581] Chalais", "[582] Champagne-Mouton", "[583] Châteauneuf-sur-Charente", "[584] Cognac-Nord", "[585] Confolens-Nord", "[586] Confolens-Sud", "[587] Hiersac", "[588] Jarnac", "[589] Mansle", "[590] Montbron",
            "[591] Montembœuf", "[592] Montmoreau-Saint-Cybard", "[593] Rochefoucauld", "[594] Rouillac", "[595] Ruffec", "[596] Saint-Amant-de-Boixe", "[597] Saint-Claud", "[598] Segonzac", "[599] Villebois-Lavalette", "[600] Villefagnan",
            "[601] Couronne", "[602] Ruelle-sur-Touvre", "[603] Soyaux", "[604] Cognac-Sud", "[605] Angoulême-Ouest", "[606] Gond-Pontouvre", "[607] Aigrefeuille-d'Aunis", "[608] Archiac", "[609] Ars-en-Ré", "[610] Aulnay",
            "[611] Burie", "[612] Château-d'Oléron", "[613] Courçon", "[614] Cozes", "[615] Gémozac", "[616] Jarrie", "[617] Jonzac", "[618] Loulay", "[619] Marans", "[620] Marennes",
            "[621] Matha", "[622] Mirambeau", "[623] Montendre", "[624] Montguyon", "[625] Montlieu-la-Garde", "[626] Pons", "[627] Rochefort-Nord", "[628] Rochefort-Sud", "[629] Rochelle  1er Canton", "[630] Rochelle  2e  Canton",
            "[631] Royan-Est", "[632] Saint-Agnant", "[633] Saint-Genis-de-Saintonge", "[634] Saint-Hilaire-de-Villefranche", "[635] Saint-Jean-d'Angély", "[636] Saint-Martin-de-Ré", "[637] Saint-Pierre-d'Oléron", "[638] Saint-Porchaire", "[639] Saint-Savinien", "[640] Saintes-Nord",
            "[641] Saintes-Ouest", "[642] Saujon", "[643] Surgères", "[644] Tonnay-Boutonne", "[645] Tonnay-Charente", "[646] Tremblade", "[647] Rochelle  3e  Canton", "[648] Rochelle  4e  Canton", "[649] Royan-Ouest", "[650] Rochelle  5e  Canton",
            "[651] Rochelle  6e  Canton", "[652] Aytré", "[653] Rochefort-Centre", "[654] Rochelle  7e  Canton", "[655] Rochelle  8e  Canton", "[656] Rochelle  9e  Canton", "[657] Saintes-Est", "[658] Aix-d'Angillon", "[659] Argent-sur-Sauldre", "[660] Aubigny-sur-Nère",
            "[661] Baugy", "[662] Bourges  1er Canton", "[663] Chapelle-d'Angillon", "[664] Charenton-du-Cher", "[665] Chârost", "[666] Châteaumeillant", "[667] Châteauneuf-sur-Cher", "[668] Châtelet", "[669] Dun-sur-Auron", "[670] Graçay",
            "[671] Guerche-sur-l'Aubois", "[672] Henrichemont", "[673] Léré", "[674] Levet", "[675] Lignières", "[676] Lury-sur-Arnon", "[677] Mehun-sur-Yèvre", "[678] Nérondes", "[679] Saint-Amand-Montrond", "[680] Saint-Martin-d'Auxigny",
            "[681] Sancergues", "[682] Sancerre", "[683] Sancoins", "[684] Saulzais-le-Potier", "[685] Vailly-sur-Sauldre", "[686] Vierzon  1er Canton", "[687] Vierzon  2e  Canton", "[688] Bourges  2e  Canton", "[689] Bourges  3e  Canton", "[690] Bourges  4e  Canton",
            "[691] Bourges  5e  Canton", "[692] Saint-Doulchard", "[693] Argentat", "[694] Ayen", "[695] Beaulieu-sur-Dordogne", "[696] Beynat", "[697] Bort-les-Orgues", "[698] Brive-la-Gaillarde-Nord-Est", "[699] Bugeat", "[700] Corrèze",
            "[701] Donzenac", "[702] Égletons", "[703] Eygurande", "[704] Juillac", "[705] Lapleau", "[706] Larche", "[707] Lubersac", "[708] Mercœur", "[709] Meymac", "[710] Meyssac",
            "[711] Neuvic", "[712] Roche-Canillac", "[713] Saint-Privat", "[714] Seilhac", "[715] Sornac", "[716] Treignac", "[717] Tulle-Urbain-Nord", "[718] Tulle-Urbain-Sud", "[719] Ussel-Est", "[720] Uzerche",
            "[721] Vigeois", "[722] Brive-la-Gaillarde-Sud-Est", "[723] Brive-la-Gaillarde-Centre", "[724] Brive-la-Gaillarde-Nord-Ouest", "[725] Brive-la-Gaillarde-Sud-Ouest", "[726] Malemort-sur-Corrèze", "[727] Tulle-Campagne-Nord", "[728] Tulle-Campagne-Sud", "[729] Ussel-Ouest", "[730] Ajaccio  1er Canton",
            "[731] Bastelica", "[732] Celavo-Mezzana", "[733] Bonifacio", "[734] Levie", "[735] Olmeto", "[736] Petreto-Bicchisano", "[737] Deux-Sevi", "[738] Porto-Vecchio", "[739] Santa-Maria-Siché", "[740] Cruzini-Cinarca",
            "[741] Sartène", "[742] Tallano-Scopamène", "[743] Deux-Sorru", "[744] Zicavo", "[745] Ajaccio  2e  Canton", "[746] Ajaccio  3e  Canton", "[747] Ajaccio  4e  Canton", "[748] Ajaccio  5e  Canton", "[749] Figari", "[750] Ajaccio  6e  Canton",
            "[751] Ajaccio  7e  Canton", "[752] Bastia  1er Canton", "[753] Bastia  2e  Canton", "[754] Belgodère", "[755] Borgo", "[756] Sagro-di-Santa-Giulia", "[757] Niolu-Omessa", "[758] Calenzana", "[759] Calvi", "[760] Alto-di-Casaconi",
            "[761] Campoloro-di-Moriani", "[762] Corte", "[763] Ghisoni", "[764] Île-Rousse", "[765] Moïta-Verde", "[766] Castifao-Morosaglia", "[767] Haut-Nebbio", "[768] Conca-d'Oro", "[769] Orezza-Alesani", "[770] Fiumalto-d'Ampugnani",
            "[771] Prunelli-di-Fiumorbo", "[772] Capobianco", "[773] San-Martino-di-Lota", "[774] Bustanico", "[775] Venaco", "[776] Vescovato", "[777] Vezzani", "[778] Bastia  3e  Canton", "[779] Bastia  4e  Canton", "[780] Bastia  5e  (Canton Lupino)",
            "[781] Bastia  6e  (Canton Furiani-Montésoro)", "[782] Aignay-le-Duc", "[783] Arnay-le-Duc", "[784] Auxonne", "[785] Baigneux-les-Juifs", "[786] Beaune-Nord", "[787] Beaune-Sud", "[788] Bligny-sur-Ouche", "[789] Châtillon-sur-Seine", "[790] Dijon  1er Canton",
            "[791] Dijon  2e  Canton", "[792] Dijon  3e  Canton", "[793] Dijon  4e  Canton", "[794] Fontaine-Française", "[795] Genlis", "[796] Gevrey-Chambertin", "[797] Grancey-le-Château-Neuvelle", "[798] Is-sur-Tille", "[799] Laignes", "[800] Liernais",
            "[801] Mirebeau-sur-Bèze", "[802] Montbard", "[803] Montigny-sur-Aube", "[804] Nolay", "[805] Nuits-Saint-Georges", "[806] Pontailler-sur-Saône", "[807] Pouilly-en-Auxois", "[808] Précy-sous-Thil", "[809] Recey-sur-Ource", "[810] Saint-Jean-de-Losne",
            "[811] Saint-Seine-l'Abbaye", "[812] Saulieu", "[813] Selongey", "[814] Semur-en-Auxois", "[815] Seurre", "[816] Sombernon", "[817] Venarey-les-Laumes", "[818] Vitteaux", "[819] Chenôve", "[820] Dijon  5e  Canton",
            "[821] Dijon  6e  Canton", "[822] Dijon  7e  Canton", "[823] Dijon  8e  Canton", "[824] Fontaine-lès-Dijon", "[825] Bégard", "[826] Belle-Isle-en-Terre", "[827] Bourbriac", "[828] Broons", "[829] Callac", "[830] Caulnes",
            "[831] Châtelaudren", "[832] Chèze", "[833] Collinée", "[834] Corlay", "[835] Dinan-Est", "[836] Dinan-Ouest", "[837] Étables-sur-Mer", "[838] Évran", "[839] Gouarec", "[840] Guingamp",
            "[841] Jugon-les-Lacs", "[842] Lamballe", "[843] Lannion", "[844] Lanvollon", "[845] Lézardrieux", "[846] Loudéac", "[847] Maël-Carhaix", "[848] Matignon", "[849] Merdrignac", "[850] Moncontour",
            "[851] Mûr-de-Bretagne", "[852] Paimpol", "[853] Perros-Guirec", "[854] Plancoët", "[855] Plélan-le-Petit", "[856] Pléneuf-Val-André", "[857] Plestin-les-Grèves", "[858] Plœuc-sur-Lié", "[859] Plouagat", "[860] Plouaret",
            "[861] Ploubalay", "[862] Plouguenast", "[863] Plouha", "[864] Pontrieux", "[865] Quintin", "[866] Roche-Derrien", "[867] Rostrenen", "[868] Saint-Brieuc-Nord", "[869] Saint-Brieuc-Sud", "[870] Saint-Nicolas-du-Pélem",
            "[871] Tréguier", "[872] Uzel", "[873] Langueux", "[874] Plérin", "[875] Ploufragan", "[876] Saint-Brieuc-Ouest", "[877] Ahun", "[878] Aubusson", "[879] Auzances", "[880] Bellegarde-en-Marche",
            "[881] Bénévent-l'Abbaye", "[882] Bonnat", "[883] Bourganeuf", "[884] Boussac", "[885] Chambon-sur-Voueize", "[886] Châtelus-Malvaleix", "[887] Chénérailles", "[888] Courtine", "[889] Crocq", "[890] Dun-le-Palestel",
            "[891] Évaux-les-Bains", "[892] Felletin", "[893] Gentioux-Pigerolles", "[894] Grand-Bourg", "[895] Guéret-Nord", "[896] Jarnages", "[897] Pontarion", "[898] Royère-de-Vassivière", "[899] Saint-Sulpice-les-Champs", "[900] Saint-Vaury",
            "[901] Souterraine", "[902] Guéret-Sud-Est", "[903] Guéret-Sud-Ouest", "[904] Beaumont-du-Périgord", "[905] Belvès", "[906] Bergerac  1er Canton", "[907] Brantôme", "[908] Bugue", "[909] Bussière-Badil", "[910] Buisson-de-Cadouin",
            "[911] Carlux", "[912] Champagnac-de-Belair", "[913] Domme", "[914] Excideuil", "[915] Eymet", "[916] Hautefort", "[917] Issigeac", "[918] Jumilhac-le-Grand", "[919] Force", "[920] Lalinde",
            "[921] Lanouaille", "[922] Mareuil", "[923] Monpazier", "[924] Montagrier", "[925] Montignac", "[926] Montpon-Ménestérol", "[927] Mussidan", "[928] Neuvic", "[929] Nontron", "[930] Périgueux-Centre",
            "[931] Ribérac", "[932] Sainte-Alvère", "[933] Saint-Astier", "[934] Saint-Aulaye", "[935] Saint-Cyprien", "[936] Saint-Pardoux-la-Rivière", "[937] Saint-Pierre-de-Chignac", "[938] Salignac-Eyvigues", "[939] Sarlat-la-Canéda", "[940] Savignac-les-Églises",
            "[941] Sigoulès", "[942] Terrasson-Lavilledieu", "[943] Thenon", "[944] Thiviers", "[945] Vélines", "[946] Vergt", "[947] Verteillac", "[948] Villamblard", "[949] Villefranche-de-Lonchat", "[950] Villefranche-du-Périgord",
            "[951] Bergerac  2e  Canton", "[952] Périgueux-Nord-Est", "[953] Périgueux-Ouest", "[954] Amancey", "[955] Audeux", "[956] Audincourt", "[957] Baume-les-Dames", "[958] Besançon-Nord-Est", "[959] Besançon-Sud", "[960] Boussières",
            "[961] Clerval", "[962] Hérimoncourt", "[963] Isle-sur-le-Doubs", "[964] Levier", "[965] Maîche", "[966] Marchaux", "[967] Montbéliard-Est", "[968] Montbenoît", "[969] Morteau", "[970] Mouthe",
            "[971] Ornans", "[972] Pierrefontaine-les-Varans", "[973] Pontarlier", "[974] Pont-de-Roide", "[975] Quingey", "[976] Rougemont", "[977] Roulans", "[978] Russey", "[979] Saint-Hippolyte", "[980] Vercel-Villedieu-le-Camp",
            "[981] Besançon-Est", "[982] Besançon-Ouest", "[983] Montbéliard-Ouest", "[984] Sochaux-Grand-Charmont", "[985] Besançon-Nord-Ouest", "[986] Besançon-Planoise", "[987] Étupes", "[988] Valentigney", "[989] Bourdeaux", "[990] Bourg-de-Péage",
            "[991] Buis-les-Baronnies", "[992] Chabeuil", "[993] Chapelle-en-Vercors", "[994] Châtillon-en-Diois", "[995] Crest-Nord", "[996] Crest-Sud", "[997] Die", "[998] Dieulefit", "[999] Grand-Serre", "[1000] Grignan"
        };
 
        // construction du modèle initial contenant
        // les 1000 noms :
        DefaultComboBoxModel model = new DefaultComboBoxModel() ;
        for (String name : NAMES) {
            model.addElement(name);
        }
 
        // création de la JComboBox sur la base du
        // modèle précédent :
        final JComboBox cb = new JComboBox(model) ;
        cb.setEditable(true);
 
        // ajout d'un Listener sur les évènements clavier
        // si le contenu du champ texte est modifié, la liste des
        // choix possibles est limitée aux noms contenant la
        // chaîne entrée par l'utilisateur
        cb.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent e) {
                // en cas d'appui sur une touche au sein
                // de la zone de texte...
                // on récupère le texte entré :
                String text2 = (String) cb.getEditor().getItem();
                // on crée un nouveau modèle...
                DefaultComboBoxModel model2 = new DefaultComboBoxModel() ;
                // ... qui ne contient que les zones contenant le texte entré :
                for (String name : NAMES) {
                    if (name.contains(""+text2)) {
                        model2.addElement(name);
                    }
                }
                // on affiche dans le titre de la fenêtre le nb de choix possibles :
                frame.setTitle("SmartJComboBox ("+model2.getSize()+")");
                // on met en oeuvre le nouveau modèle :
                cb.setModel(model2);
                // on ré-affiche le texte entré par l'utilisateur après le changement de modèle :
                cb.getEditor().setItem(text2);
                // on force l'affichage de la liste :
                cb.setPopupVisible(true);
            }
        } );
 
        // affichage de la fenêtre principale :
        frame.add(cb) ;
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack() ;
        frame.setLocationRelativeTo(null); // pour centrer sur l'écran
        frame.setVisible(true);
    }
}