⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 checkboxcontrols.java

📁 经典的货郎担问题解决办法
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
/*** 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 + -