📄 checkboxcontrols.java
字号:
/*** This code class was written by Kent Paul Dolan. Most of its original** contents were removed from Scott Robert Ladd's Traveller.java and** TravellerWorld.java source files (but it has grown manyfold in size** over Scott's original work); see those files for Scott's copyright** rules. See accompanying file TravellerDoc.html for status of the** modifications here (an extensive refactoring and rewrite) for your** use.*/package com.well.www.user.xanthian.java.ui;import java.awt.*;import java.awt.event.*;import com.coyotegulch.ui.*;import com.well.www.user.xanthian.java.tools.*;public class CheckBoxControls{ public CheckBoxControls() { super(); }/*** Create zillions of checkboxes.**** This is lots easier to maintain since I collapsed Scott's three** naming schemes (member variable names, mask names, and array index** names) into one (the latter), got rid of all the individual member** boolean variables in favor of arrays of booleans named by the index** names only, and consolidated all the checkbox stuff in this separate** class accessed the same way from Traveller as from TravellerWorld.** Somewhere, though, I suspect, there is still a skinny little** TravellerCheckBox class waiting to be found in all this fat.**** At least the Easter egg hunt for stuff to update has been simplified** when adding a new checkbox.*//*** Seize control of our own destiny, own our own window and the panel** that fills it.*/ private static TravellerFrame m_skillsFrame = null; private static EdgedPanel m_skillsPanel = null; private final static String SKILLS_NAME = "旅行商功能结构菜单"; private final static int HOW_MANY_COLUMNS = 3;/*** Assign names to array locations to help keep them in synch.*/ // layout pattern options public final static int CBC_LAYOUT_CIRCULAR = 0; public final static int CBC_LAYOUT_EVEN_GRID = 1; public final static int CBC_LAYOUT_FRACTAL = 2; public final static int CBC_LAYOUT_NESTED_GRID = 3; public final static int CBC_LAYOUT_POLY_SPIRAL = 4; public final static int CBC_LAYOUT_RANDOM = 5; // other layout options public final static int CBC_LAYOUT_PERTURB = 6; // MAINTAINER NOTE: Fix CBC_FIRST_HEURISTIC if one is added here. // sexual reproducers public final static int CBC_HEURISTIC_CYCLIC_CROSSOVER = 7; public final static int CBC_HEURISTIC_EDGE_PRESERVING_CROSSOVER = 8; public final static int CBC_HEURISTIC_ORDERED_CROSSOVER = 9; public final static int CBC_HEURISTIC_PARTIAL_MATCH_CROSSOVER = 10; public final static int CBC_HEURISTIC_ROLLING_CROSSOVER = 11; // consultative reproducers public final static int CBC_HEURISTIC_INVER_OVER = 12; // asexual reproducers public final static int CBC_HEURISTIC_DEWRINKLER = 13; public final static int CBC_HEURISTIC_DISORDERED_SLIDE = 14; public final static int CBC_HEURISTIC_INVERT = 15; public final static int CBC_HEURISTIC_MOVE = 16; public final static int CBC_HEURISTIC_OPTIMIZE_NODES_AND_EDGES_NEAR_A_POINT = 17; public final static int CBC_HEURISTIC_OPTIMIZE_NODES_AND_EDGES_NEAR_EVERY_CITY = 18; public final static int CBC_HEURISTIC_OPTIMIZE_NODES_NEAR_A_POINT = 19; public final static int CBC_HEURISTIC_OPTIMIZE_NODES_NEAR_EVERY_CITY = 20; public final static int CBC_HEURISTIC_ORDERED_SLIDE = 21; public final static int CBC_HEURISTIC_PERMUTE_A_SUBLIST = 22; public final static int CBC_HEURISTIC_PERMUTE_CUTS_NEAR_A_POINT = 23; public final static int CBC_HEURISTIC_PERMUTE_CUTS_NEAR_EVERY_CITY = 24; public final static int CBC_HEURISTIC_PERMUTE_SINGLES = 25; public final static int CBC_HEURISTIC_PERMUTE_SUBLISTS = 26; public final static int CBC_HEURISTIC_QUASI_QUICK_SORT = 27; public final static int CBC_HEURISTIC_QUASI_SHELL_SORT_INVERTER = 28; public final static int CBC_HEURISTIC_QUASI_SHELL_SORT_SWAPPER = 29; public final static int CBC_HEURISTIC_RANDOM_LOOP_CUTS = 30; public final static int CBC_HEURISTIC_RANDOM_LOOP_NODES = 31; public final static int CBC_HEURISTIC_RANDOM_LOOP_NODES_AND_EDGES = 32; public final static int CBC_HEURISTIC_SMOOTHER = 33; public final static int CBC_HEURISTIC_SNOW_PLOW = 34; public final static int CBC_HEURISTIC_SNOW_PLOW_SQUEEZEBOX = 35; public final static int CBC_HEURISTIC_SWAP = 36; // MAINTAINER NOTE: Fix CBC_LAST_HEURISTIC if one is added here. // complex metaheuristics public final static int CBC_METAHEURISTIC_ALLOPATRIC_DEMES = 37; public final static int CBC_METAHEURISTIC_ANNEALING = 38; public final static int CBC_METAHEURISTIC_COEVOLVE_CROPPERS = 39; public final static int CBC_METAHEURISTIC_SINGLE_ELITISM = 40; public final static int CBC_METAHEURISTIC_TABU_SEARCH = 41; // selection biasing metaheuristics public final static int CBC_METAHEURISTIC_ROULETTE_WHEEL = 42; public final static int CBC_METAHEURISTIC_STRONG_TOURNEY = 43; public final static int CBC_METAHEURISTIC_WEAK_TOURNEY = 44; // population genome seeding options public final static int CBC_SEED_FROM_DELAUNEY_TRIANGULATION = 45; public final static int CBC_SEED_FROM_ELASTIC_NET = 46; public final static int CBC_SEED_FROM_LOCAL_OPTIMIZATION = 47; public final static int CBC_SEED_FROM_MINIMAL_SPANNING_TREE = 48; public final static int CBC_SEED_FROM_RANDOM_POINTS = 49; // inferior genome drawing options public final static int CBC_DEBUG_DRAW_ALL_ALWAYS = 50; public final static int CBC_DEBUG_DRAW_ALL_ONCE = 51; // debugging controls public final static int CBC_DEBUG_PRINTOUTS = 52; public final static int CBC_DEBUG_VISUAL_WINDOWS = 53; public final static int CBC_DEBUG_PROGRESS_COUNTERS = 54; // count for number of checkboxes altogether (zero // based list!), used as a loop limit. public final static int CBC_NUMBER_OF_CHECKBOXES = 55; // loop controls; maintain with above list!! private final static int CBC_FIRST_HEURISTIC = CBC_HEURISTIC_CYCLIC_CROSSOVER; private final static int CBC_LAST_HEURISTIC = CBC_HEURISTIC_SWAP; // default checkbox settings, for initial setup and restore // defaults cases. private final static boolean [] m_defaults = { false, // CBC_LAYOUT_CIRCULAR false, // CBC_LAYOUT_EVEN_GRID false, // CBC_LAYOUT_FRACTAL false, // CBC_LAYOUT_NESTED_GRID false, // CBC_LAYOUT_POLY_SPIRAL true, // CBC_LAYOUT_RANDOM false, // CBC_LAYOUT_PERTURB false, // CBC_HEURISTIC_CYCLIC_CROSSOVER false, // CBC_HEURISTIC_EDGE_PRESERVING_CROSSOVER false, // CBC_HEURISTIC_ORDERED_CROSSOVER false, // CBC_HEURISTIC_PARTIAL_MATCH_CROSSOVER false, // CBC_HEURISTIC_ROLLING_CROSSOVER true, // CBC_HEURISTIC_INVER_OVER false, // CBC_HEURISTIC_DEWRINKLER false, // CBC_HEURISTIC_DISORDERED_SLIDE false, // CBC_HEURISTIC_INVERT false, // CBC_HEURISTIC_MOVE false, // CBC_HEURISTIC_OPTIMIZE_NODES_AND_EDGES_NEAR_A_POINT false, // CBC_HEURISTIC_OPTIMIZE_NODES_AND_EDGES_NEAR_EVERY_CITY false, // CBC_HEURISTIC_OPTIMIZE_NODES_NEAR_A_POINT false, // CBC_HEURISTIC_OPTIMIZE_NODES_NEAR_EVERY_CITY false, // CBC_HEURISTIC_ORDERED_SLIDE false, // CBC_HEURISTIC_PERMUTE_A_SUBLIST false, // CBC_HEURISTIC_PERMUTE_CUTS_NEAR_A_POINT false, // CBC_HEURISTIC_PERMUTE_CUTS_NEAR_EVERY_CITY false, // CBC_HEURISTIC_PERMUTE_SINGLES false, // CBC_HEURISTIC_PERMUTE_SUBLISTS false, // CBC_HEURISTIC_QUASI_QUICK_SORT false, // CBC_HEURISTIC_QUASI_SHELL_SORT_INVERTER false, // CBC_HEURISTIC_QUASI_SHELL_SORT_SWAPPER false, // CBC_HEURISTIC_RANDOM_LOOP_CUTS false, // CBC_HEURISTIC_RANDOM_LOOP_NODES false, // CBC_HEURISTIC_RANDOM_LOOP_NODES_AND_EDGES false, // CBC_HEURISTIC_SMOOTHER false, // CBC_HEURISTIC_SNOW_PLOW false, // CBC_HEURISTIC_SNOW_PLOW_SQUEEZEBOX false, // CBC_HEURISTIC_SWAP false, // CBC_METAHEURISTIC_ALLOPATRIC_DEMES false, // CBC_METAHEURISTIC_ANNEALING false, // CBC_METAHEURISTIC_COEVOLVE_CROPPERS false, // CBC_METAHEURISTIC_SINGLE_ELITISM false, // CBC_METAHEURISTIC_TABU_SEARCH true, // CBC_METAHEURISTIC_ROULETTE_WHEEL false, // CBC_METAHEURISTIC_STRONG_TOURNEY false, // CBC_METAHEURISTIC_WEAK_TOURNEY false, // CBC_SEED_FROM_DELAUNEY_TRIANGULATION false, // CBC_SEED_FROM_ELASTIC_NET false, // CBC_SEED_FROM_LOCAL_OPTIMIZATION false, // CBC_SEED_FROM_MINIMAL_SPANNING_TREE true, // CBC_SEED_FROM_RANDOM_POINTS false, // CBC_DEBUG_DRAW_ALL_ALWAYS false, // CBC_DEBUG_DRAW_ALL_ONCE false, // CBC_DEBUG_PRINTOUTS false, // CBC_DEBUG_VISUAL_WINDOWS true, // CBC_DEBUG_PROGRESS_COUNTERS }; // current checkbox states, initialized with default // states from above list (isn't that _cute_?) private static boolean m_states[] = new boolean[] { m_defaults[CBC_LAYOUT_CIRCULAR], m_defaults[CBC_LAYOUT_EVEN_GRID], m_defaults[CBC_LAYOUT_FRACTAL], m_defaults[CBC_LAYOUT_NESTED_GRID], m_defaults[CBC_LAYOUT_POLY_SPIRAL], m_defaults[CBC_LAYOUT_RANDOM], m_defaults[CBC_LAYOUT_PERTURB], m_defaults[CBC_HEURISTIC_CYCLIC_CROSSOVER], m_defaults[CBC_HEURISTIC_EDGE_PRESERVING_CROSSOVER], m_defaults[CBC_HEURISTIC_ORDERED_CROSSOVER], m_defaults[CBC_HEURISTIC_PARTIAL_MATCH_CROSSOVER], m_defaults[CBC_HEURISTIC_ROLLING_CROSSOVER], m_defaults[CBC_HEURISTIC_INVER_OVER], m_defaults[CBC_HEURISTIC_DEWRINKLER], m_defaults[CBC_HEURISTIC_DISORDERED_SLIDE], m_defaults[CBC_HEURISTIC_INVERT], m_defaults[CBC_HEURISTIC_MOVE], m_defaults[CBC_HEURISTIC_OPTIMIZE_NODES_AND_EDGES_NEAR_A_POINT], m_defaults[CBC_HEURISTIC_OPTIMIZE_NODES_AND_EDGES_NEAR_EVERY_CITY], m_defaults[CBC_HEURISTIC_OPTIMIZE_NODES_NEAR_A_POINT], m_defaults[CBC_HEURISTIC_OPTIMIZE_NODES_NEAR_EVERY_CITY], m_defaults[CBC_HEURISTIC_ORDERED_SLIDE], m_defaults[CBC_HEURISTIC_PERMUTE_A_SUBLIST], m_defaults[CBC_HEURISTIC_PERMUTE_CUTS_NEAR_A_POINT], m_defaults[CBC_HEURISTIC_PERMUTE_CUTS_NEAR_EVERY_CITY], m_defaults[CBC_HEURISTIC_PERMUTE_SUBLISTS], m_defaults[CBC_HEURISTIC_PERMUTE_SINGLES], m_defaults[CBC_HEURISTIC_QUASI_QUICK_SORT], m_defaults[CBC_HEURISTIC_QUASI_SHELL_SORT_INVERTER], m_defaults[CBC_HEURISTIC_QUASI_SHELL_SORT_SWAPPER], m_defaults[CBC_HEURISTIC_RANDOM_LOOP_CUTS], m_defaults[CBC_HEURISTIC_RANDOM_LOOP_NODES], m_defaults[CBC_HEURISTIC_RANDOM_LOOP_NODES_AND_EDGES], m_defaults[CBC_HEURISTIC_SMOOTHER], m_defaults[CBC_HEURISTIC_SNOW_PLOW], m_defaults[CBC_HEURISTIC_SNOW_PLOW_SQUEEZEBOX], m_defaults[CBC_HEURISTIC_SWAP], m_defaults[CBC_METAHEURISTIC_ALLOPATRIC_DEMES], m_defaults[CBC_METAHEURISTIC_ANNEALING], m_defaults[CBC_METAHEURISTIC_COEVOLVE_CROPPERS], m_defaults[CBC_METAHEURISTIC_SINGLE_ELITISM], m_defaults[CBC_METAHEURISTIC_TABU_SEARCH], m_defaults[CBC_METAHEURISTIC_ROULETTE_WHEEL], m_defaults[CBC_METAHEURISTIC_STRONG_TOURNEY], m_defaults[CBC_METAHEURISTIC_WEAK_TOURNEY], m_defaults[CBC_SEED_FROM_DELAUNEY_TRIANGULATION], m_defaults[CBC_SEED_FROM_ELASTIC_NET], m_defaults[CBC_SEED_FROM_LOCAL_OPTIMIZATION], m_defaults[CBC_SEED_FROM_MINIMAL_SPANNING_TREE], m_defaults[CBC_SEED_FROM_RANDOM_POINTS], m_defaults[CBC_DEBUG_DRAW_ALL_ALWAYS], m_defaults[CBC_DEBUG_DRAW_ALL_ONCE], m_defaults[CBC_DEBUG_PRINTOUTS], m_defaults[CBC_DEBUG_VISUAL_WINDOWS], m_defaults[CBC_DEBUG_PROGRESS_COUNTERS], }; // Labels used in the user interface to identify the // checkboxes. private final static String [] m_labels = { // city layout controls "环状布局? ", // CBC_LAYOUT_CIRCULAR "均匀网格状布局? ", // CBC_LAYOUT_EVEN_GRID "* 分散布局? ", // CBC_LAYOUT_FRACTAL "巢状网格布局? ", // CBC_LAYOUT_NESTED_GRID "螺旋状布局? ", // CBC_LAYOUT_POLY_SPIRAL "随机产生布局? ", // CBC_LAYOUT_RANDOM "混乱布局? ", // CBC_LAYOUT_PERTURB // sexual reproduction controls "循环交叉探索法? ", // CBC_HEURISTIC_CYCLIC_CROSSOVER "边缘保持插补交叉探索法? ", // CBC_HEURISTIC_EDGE_PRESERVING_CROSSOVER "顺序交叉探索法? ", // CBC_HEURISTIC_ORDERED_CROSSOVER "部分匹配交叉探索法? ", // CBC_HEURISTIC_PARTIAL_MATCH_CROSSOVER "滚动交叉探索法? ", // CBC_HEURISTIC_ROLLING_CROSSOVER // consultative reproduction controls "inver_over算子探索法? ", // CBC_HEURISTIC_INVER_OVER // asexual reproduction controls "去皱探索法? ", // CBC_HEURISTIC_DEWRINKLER "无序滑动探索法? ", // CBC_HEURISTIC_DISORDERED_SLIDE "倒置探索法? ", // CBC_HEURISTIC_INVERT "Move探索法? ", // CBC_HEURISTIC_MOVE "对一个城市附近节点和边界优化探索法\uFFFD? ", // CBC_HEURISTIC_OPTIMIZE_NODES_AND_EDGES_NEAR_A_POINT "对每个城市附近节点和边界优化探索法? ", // CBC_HEURISTIC_OPTIMIZE_NODES_AND_EDGES_NEAR_EVERY_CITY "对一个城市附近节点优化探索法? ", // CBC_HEURISTIC_OPTIMIZE_NODES_NEAR_A_POINT "对每个城市附近节点优化探索法? ", // CBC_HEURISTIC_OPTIMIZE_NODES_NEAR_EVERY_CITY "有序滑动探索法? ", // CBC_HEURISTIC_ORDERED_SLIDE "改变一个附属目录探索法? ", // CBC_HEURISTIC_PERMUTE_A_SUBLIST "在一个城市附近改变路径探索法? ", // CBC_HEURISTIC_PERMUTE_CUTS_NEAR_A_POINT "在每个城市附近改变路径探索法? ", // CBC_HEURISTIC_PERMUTE_CUTS_NEAR_EVERY_CITY "改变单程探索法? ", // CBC_HEURISTIC_PERMUTE_SINGLES "改变多个附属目录探索法? ", // CBC_HEURISTIC_PERMUTE_SUBLISTS "近似快速排序探索法? ", // CBC_HEURISTIC_QUASI_QUICK_SORT "近似递减增量排序变换器探索法? ", // CBC_HEURISTIC_QUASI_SHELL_SORT_INVERTER "近似递减增量排序交换器探索法? ", // CBC_HEURISTIC_QUASI_SHELL_SORT_SWAPPER "随机城市循环路径探索法? ", // CBC_HEURISTIC_RANDOM_LOOP_CUTS "随机城市循环节点探索法? ", // CBC_HEURISTIC_RANDOM_LOOP_NODES "随机城市循环节点和边界探索法? ", // CBC_HEURISTIC_RANDOM_LOOP_NODES_AND_EDGES "平滑探索法? ", // CBC_HEURISTIC_SMOOTHER "Snow Plow探索法? ", // CBC_HEURISTIC_SNOW_PLOW "Snow Plow Squeezebox探索法? ", // CBC_HEURISTIC_SNOW_PLOW_SQUEEZEBOX "交换探索法? ", // CBC_HEURISTIC_SWAP // Metaheuristic controls "* 异地类群? ", // CBC_METAHEURISTIC_ALLOPATRIC_DEMES "激活退火? ", // CBC_METAHEURISTIC_ANNEALING "* 共同进化失败? ", // CBC_METAHEURISTIC_COEVOLVE_CROPPERS "个体精英主义? ", // CBC_METAHEURISTIC_SINGLE_ELITISM "*Tabu搜索策略? ", // CBC_METAHEURISTIC_TABU_SEARCH "赌盘?", // CBC_METAHEURISTIC_ROULETTE_WHEEL "* Strong Tourney策略?", // CBC_METAHEURISTIC_STRONG_TOURNEY "* Weak Tourney策略? ", // CBC_METAHEURISTIC_WEAK_TOURNEY // Sighted cheat startup heuristic controls "* 由三角形化网络产生种群? ", // CBC_SEED_FROM_DELAUNEY_TRIANGULATION "由弹性网络产生种群? ", // CBC_SEED_FROM_ELASTIC_NET "* 由局部最优化产生种群? ", // CBC_SEED_FROM_LOCAL_OPTIMIZATION "由最小生成树产生种群? ", // CBC_SEED_FROM_MINIMAL_SPANNING_TREE "随机产生种群? ", // CBC_SEED_FROM_RANDOM_POINTS // path drawing controls "始终画所有路径? ", // CBC_DEBUG_DRAW_ALL_ALWAYS "所有路径仅画一次? ", // CBC_DEBUG_DRAW_ALL_ONCE // Debug controls "激活文本调试? ", // CBC_DEBUG_PRINTOUTS "激活可视化调试? ", // CBC_DEBUG_VISUAL_WINDOWS "激活进度计数器? ", // CBC_DEBUG_PROGRESS_COUNTERS }; // allocate a control array public static Checkbox [] m_boxes = new Checkbox[CBC_NUMBER_OF_CHECKBOXES];/*** The layout options are here implemented as a cheesy set of radio** buttons, just so as not to have to deal with redoing the layout to** use real radio buttons. Reject attempts to turn oneself off; for a** radio button, other buttons must turn it off by turning on** themselves.*/ private static class ActionConfigCircular implements ItemListener { public void itemStateChanged(ItemEvent event) {/*** I am a radio button, turn myself back on from the checkbox's point of** view if I was clicked while already on from the state list point of** view.*/ if (m_states[CBC_LAYOUT_CIRCULAR]) { m_boxes[CBC_LAYOUT_CIRCULAR].setState(true); }/*** Now sample my state from the checkbox (though I already "know" it, in** case that sampling has side effects I need.*/ m_states[CBC_LAYOUT_CIRCULAR] = m_boxes[CBC_LAYOUT_CIRCULAR].getState();/*** Finally, turn off all of my companion radio buttons in both checkbox** and state list views.*/ if ( m_states[CBC_LAYOUT_EVEN_GRID] ) { m_boxes[CBC_LAYOUT_EVEN_GRID].setState(false); m_states[CBC_LAYOUT_EVEN_GRID] = false; } if ( m_states[CBC_LAYOUT_FRACTAL] ) { m_boxes[CBC_LAYOUT_FRACTAL].setState(false); m_states[CBC_LAYOUT_FRACTAL] = false; } if ( m_states[CBC_LAYOUT_NESTED_GRID] ) { m_boxes[CBC_LAYOUT_NESTED_GRID].setState(false); m_states[CBC_LAYOUT_NESTED_GRID] = false; } if ( m_states[CBC_LAYOUT_POLY_SPIRAL] ) { m_boxes[CBC_LAYOUT_POLY_SPIRAL].setState(false); m_states[CBC_LAYOUT_POLY_SPIRAL] = false; } if ( m_states[CBC_LAYOUT_RANDOM] ) { m_boxes[CBC_LAYOUT_RANDOM].setState(false); m_states[CBC_LAYOUT_RANDOM] = false; } } } private static class ActionConfigEvenGrid implements ItemListener { public void itemStateChanged(ItemEvent event) {/*** I am a radio button, turn myself back on from the checkbox's point of** view if I was clicked while already on from the state list point of** view.*/ if (m_states[CBC_LAYOUT_EVEN_GRID]) { m_boxes[CBC_LAYOUT_EVEN_GRID].setState(true); }/*** Now sample my state from the checkbox (though I already "know" it, in** case that sampling has side effects I need.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -